InfoQïŒWixã®ããšãèããããšã®ãªãèªè ã®æ¹ãžïŒïŒããã¯äœã§ããïŒ
Oleg ïŒWixïŒïŒWixSharpïŒã¯ãWindows InstallerïŒMSIïŒã«åºã¥ããå±éãªãŒãµãªã³ã°ãã¬ãŒã ã¯ãŒã¯ã§ãã WixïŒã䜿çšãããšãCïŒã§èšè¿°ãããä»æ§ã«åŸã£ãŠæ¬æ ŒçãªMSIãã£ã¹ããªãã¥ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã å žåçãªWixãœãŒã¹ãã¡ã€ã«ã¯ãCïŒã¯ã©ã¹ã䜿çšããŠWiXãšã³ãã£ãã£ãå®çŸ©ããéåžžã®CïŒã³ãŒãã§æ§æãããŠããŸãã
Wixã¯ãMSIãäœæããéã®å€ãã®åé¡ã解決ããŸãã ãšã¬ã¬ã³ãã§ç¬åµçãªæ¹æ³ã§ãå žåçãªMSI / WiXã®å¶éãåé¿ããŸãã WixïŒã¯ãScriptïŒãCoffeeScriptãGWTãªã©ã®ä»ã®ãã©ã³ã¹ã³ã³ãã€ã©ã®åŸãæ§æçã«ãã䟿å©ãªèšèªïŒãã®å Žåã¯CïŒïŒã®ãœãŒã¹ã³ãŒãã䜿çšããŠãããŸã䟿å©ã§ãªãèšèªïŒWiXïŒã®ãœãŒã¹ã³ãŒããååŸããŸãã ãã®å Žåã®ãæ§æçã«äŸ¿å©ããšã¯ãåé·æ§ãå°ãªãèªã¿ãããã³ãŒããæå³ããŸãã ã³ã³ãã€ã«æ®µéã§ããå€ãã®ãã§ãã¯ããããããé«åºŠãªããŒã«ãå©çšã§ããã³ãŒãã
WixïŒã§ã¯ããŸã£ããç°ãªãèšèªïŒC ++ãªã©ïŒã§MSIãµãã¢ãžã¥ãŒã«ïŒã«ã¹ã¿ã ã¢ã¯ã·ã§ã³ïŒãäœæããå¿ èŠããªããªããã³ã³ããŒãã³ããšåäœã®äž¡æ¹ã1ã€ã®èšèªïŒCïŒïŒã§èšè¿°ããããšãã§ããŸãã ãŸããããåäžã§ã·ã³ãã«ã§äžè²«æ§ã®ãããœãŒã¹ã³ãŒãæ§é ãå®çŸã§ããŸãã
ããããããã«éèŠãªããšã¯ãWixïŒã¯ãMSI / WiXã®ãã¹ãŠã®è€éããšçŽææ§ãé ããããèªç¶ãªæ¹æ³ã§å±éã¢ã«ãŽãªãºã ãè¡šçŸã§ããæœè±¡åã¬ã€ã€ãŒãæäŸããŸãã 以äžã®ã³ãŒãã¯ãMyã¢ããªã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããããã®.msiãã¡ã€ã«ãäœæããã¹ã¯ãªããã瀺ãå žåçãªWixïŒã®äŸã§ãã
using System; using WixSharp; class Script { static public void Main() { var project = new Project("My App", new Dir(@"%ProgramFiles%\My Company\My App", new File(@"\\BuildServer\LatestRelease\Bin\MyApp.exe"), new File(@"\\BuildServer\LatestRelease\Bin\MyApp.exe.config"), new File(@"\\BuildServer\LatestRelease\Docs\readme.txt"))); project.GUID = new Guid("6f330b47-2577-43ad-9095-1861ba25889b"); Compiler.BuildMsi(project); } }
ãã¡ãããWixã¯ããè€éãªã¹ã¯ãªããïŒã«ã¹ã¿ã ã¢ã¯ã·ã§ã³ããŸãã¯WPFãŸãã¯WinFormsäžã®ç¬èªã®UIïŒãå®è¡ã§ããŸãããäžèšã®ã³ãŒãã¯ãã®æ¬è³ªã瀺ãåªããäŸã§ãã
WixïŒã¯CS-ScriptãŠãŒãã£ãªãã£ã¹ã€ãŒãã®äžéšã§ããããã¯ãCïŒã¹ã¯ãªãããå®è¡ããããã®ãªãŒãã³ãœãŒã¹ã¹ã¯ãªãããšã³ãžã³ã§ãã InfoQã®èªè ã¯ãNotepad ++ã®CS-Scriptãã©ã°ã€ã³ã«ã€ããŠã®ååã®ã€ã³ã¿ãã¥ãŒã§æ¢ã«ã話ãããããã«ããã§ã«ããã«æ £ããŠãããããããŸããã
InfoQïŒãã¡ã€ã³åºæèšèªïŒDSLïŒåœ¢åŒã§ã¯ãªããWixïŒã®API圢åŒãéžæããçç±ã¯äœã§ããïŒ
Oleg ïŒWixïŒã®ç®æšã¯ãXMLæ§æãä»ã®ãã®ã«çœ®ãæããããšã§ã¯ãããŸããã ããã¯ãMSI + WiXãã³ãã«ã®å€ãã®å®éçãªå¶éã®1ã€ã ãã解決ããŸãã WixïŒã䜿çšããŠãå±ééçºãéåžžã®ããã°ã©ãã³ã°ã«æžãããããšæããŸããã ãœãããŠã§ã¢ãäœæããæãäžè¬çãªéçºè ããè¿ éãã€å¿«é©ã«å±éãœãªã¥ãŒã·ã§ã³ãäœæã§ããããã«ãããã£ãã®ã§ãã DSLã¯ãéçºè ã次ã®æ§æãåŠã¶å¿ èŠããããIntellisenseãªã©ã®ãã«ããŒãŠãŒãã£ãªãã£ãäžè¶³ããŠããããšãæå³ããŸãã ãŸããDSLã¯ã«ã¹ã¿ã ã¢ã¯ã·ã§ã³ãäœæããããã«å¥ã®èšèªãå¿ èŠãšããå¯èœæ§ãé«ãã§ãããã CïŒãšãæ°ã«å ¥ãã®éçºç°å¢ïŒIDEïŒããããã€ã¡ã³ããéçºããããã®ãã¯ã³ã¹ãããã·ã§ãããã«ãªãããšãæãã§ããŸããã ãããŠãããªãã®ããŒã ã¯å¥ã®WiXã¹ãã·ã£ãªã¹ããå¿ èŠãšããŸãããéåžžã®ããã°ã©ãã³ã°ã¹ãã«ã¯ãã»ãšãã©ãã¹ãŠã®å±éã·ããªãªãå®è£ ããã®ã«ååã«ãªããŸãã
ãã ããDSLã¢ãããŒããæŸæ£ããçç±ã¯ããã»ã©æçœã§ã¯ãããŸããã å žåçãªDSLã¿ã¹ã¯ã¯ãããæ§æãå¥ã®æ§æã«å€æãããããããœãããŠã§ã¢ã¢ãã«ãå¥ã®ãœãããŠã§ã¢ã¢ãã«ã«å€æããããšã§ãã WiXã®ã³ã³ããã¹ãã§ã®ç¿»èš³ã¿ã¹ã¯ã«ã¯ãå®çšçãªæå³ãã»ãšãã©ãããŸããã å®è£ ã¯ç°¡åã§ãããããã¯WiXæ§æãããåçŽãªæ§æã«å€æããã ãã§ãããMSIã®ãã¹ãŠã®å¶éãä¿æããŸãã éã«ãããã¯ãªãŒã³ã§çŽæçãªæ°ããããã°ã©ãã³ã°ã¢ãã«ãžã®å€æã¯ããŸãã«WiXãå¿ èŠãšãããã®ã§ãã ãã®ãããªå€æã¯éåžžãé«ã¬ãã«ã®æ±çšããã°ã©ãã³ã°èšèªïŒWixïŒã®ã³ã³ããã¹ãã§ã¯CïŒïŒã䜿çšããŠå®çŸãããŸãã ãã®åŸãæ°ããããã°ã©ãã³ã°ã¢ãã«ã¯éåžžãæ°ããDSLæ§æã«é¢é£ä»ããããŸãã ãã ããWixïŒã®å ŽåãæåŸã®ã¹ãããïŒæ§æãã€ã³ãã£ã³ã°ïŒã¯åœ¹ã«ç«ã¡ãŸããã Windowséçºè ã®å€§å€æ°ã¯ãéåžžã«å¿«é©ã§ããããå°ãªããšã.Netèšèªã«ç²ŸéããŠããŸãã ãããã£ãŠãæ°ããDSLæ§æã¯äœåãªãªãŒããŒããããããããã ãã§ãã ããã§ç§ã¯CïŒã«çŠç¹ãåãããããšã«ããŸããã
äžèšã«ããããããWixïŒãœãããŠã§ã¢ã¢ãã«ã®äžã«ããDSLã¯çã«ããªã£ãŠãããå®è£ ãç°¡åã§ãã ããããããã¯å šãç°ãªã話ã§ã...
InfoQïŒè€éãªãã©ãŒãããã«å ããŠãWiXæ¡çšã®æ倧ã®é害ã¯äœã ãšæããŸããïŒ
ãªã¬ã° ïŒéåžžã«è¯ã質åã§ãã ã¯ããWiXã¯æ¬åœã«éåžžã«è€éã§ãããæ¬åœã®é害ã¯è€éã§ã¯ãªããMSIãšã®å¯æ¥ãªã³ãã¥ãã±ãŒã·ã§ã³ã§ãã WiXã¯ãMSIããã°ã©ãã³ã°ã¢ãã«ãžã®ã¢ã¯ã»ã¹ãåçã«ç°¡çŽ åããŸãã ãã ããã¢ã¯ã»ã¹ã®è€éãã§ã¯ãªãããã®ã¢ãã«èªäœãåé¡ã®åå ã§ãã ãã®ãããWiXãŠãŒã¶ãŒã¯ãMSIã®äžäŸ¿ãã«ãŸã 察åŠããŠãããXMLã®ã¿ã䜿çšããŠããŸãã
ããã§ãWiXãå®ãããã«ããã€ãã®èšèãäžæããŠèšããããšæããŸãã äžå®å šãªMSIãœãããŠã§ã¢ã¢ãã«ã¯WiXã®ããã§ã¯ãããŸããã å®éãWiXãMSIã«å¯ŸããŠè¡ã£ãããšãèãããšãMSIã®å¶éãä¿®æ£ãããããšãæåŸ ããããšã¯ã»ãšãã©äžå¯èœã§ãã WiXãçã«è©äŸ¡ããã«ã¯ããã€ã¯ããœããã®å±éãã¯ãããžã®éçºãæ¯ãè¿ãå¿ èŠããããŸãã
MSIãå°å ¥ããããšããMSIã¯ããã¹ãŠã®è³ªåã«å¯Ÿããçããã«ãªãããšããŸããã ãŸããå€ãã®ãã€ã¯ããœãããã¯ãããžãŒãšåæ§ã«ãæåããéåžžã«è€éã§ããã ãã以æ¥ã圌ã¯å€ãã£ãŠããŸããã ãã€ã¯ããœããã¯MSIã«å€ãã®è€éãªæ©èœãå®è£ ããŸããããä»æ¥ã§ã¯å®çšçãªäŸ¡å€ã¯ã»ãšãã©ãããŸããïŒããšãã°ãã³ã³ããŒãã³ããMSMã åºåã®ã€ã³ã¹ããŒã«ãªã©ïŒã
ãããŠãMicrosoftãåé¡ãèªèããæåŸã®è©Šã¿ã§ããClickOnceã§ããããã¹ãŠã®æ©èœãåé€ãããšããäºå®ã«ã¯é©ãã¹ãããšã¯äœããããŸããã ClickOnceã¯éåžžã«ã·ã³ãã«ãªå±éãã¬ãŒã ã¯ãŒã¯ã§ãã å®éãMicrosoftã¯MSIã®æŠå¿µãå®å šã«æŸæ£ãã代æ¿ãšããŠClickOnceããŒãããå®è£ ããŸããã 軜éã§ãã¹ããŒãã§ããããã«ã§ãïŒè¯ãæå³ã§ïŒã 確ãã«ãããã¯ããéããããŠãããæ¡åŒµãã«ã¹ã¿ãã€ãºãã§ããŸããã
å éšã®æ¬ é¥ã®ãããMSIã¯éåžžã«éçºããããã§ãã .msiãã¡ã€ã«ã¯ããŒã¿ããŒã¹ãã¡ã€ã«ã§ãã å±éããžãã¯ã¯ãããŒãã«ã®ããŒã¿ãéããŠå®çŸ©ãããŸãã Microsoftã¯ãOrca MSIããŒãã«ãšãã£ã¿ã䜿çšããŠããã£ãŒã«ãããšã«ãã®ããŒã¿ãæåã§å ¥åããããšã«ãããMSIãäœæããããšãææ¡ããŸããã ããã«ãããInstallShieldã¯ïŒMSIãµããŒãã®äŸ¡æ Œãäžããããšã§ïŒè«å€§ãªåå ¥ãåŸãŸããããéçºè ã«ã¯äœãæ®ããŸããã§ããã ãããŠãWiXãèµ·ãããŸããã ãããŠåœŒã¯ãMSIã®ã«ãªã¹ããæ¢ããŸããã WiXã¯ã秩åºããããããMSIã®äœæããœãããŠã§ã¢éçºã®ã¿ã¹ã¯ã«ããããšïŒããŒã¿ã§ãã©ã€ãããã®ã§ã¯ãªãïŒ-ããœãŒã¹ãããã€ããªãã¡ã€ã«ãæ§ç¯ãããããšã§ç§°è³ã«å€ããŸãã ãããã£ãŠãWiXã䜿çšãããšããããã®MSIããŒãã«ã«æåã§ã¯ãªãXMLãã¡ã€ã«ãåã蟌ãããšãã§ããŸããã ãã ããããã«ããMSIéçºã®æ¬è³ªã¯å€ãããŸããã§ããã WiXã䜿çšããå Žåãéçºè ã¯ãMSIããŒãã«ãã®èŠ³ç¹ããèããªããã°ãªããŸããã§ããïŒãŸã ãããã¹ãã§ãïŒã
ã»ãã®æ°é±éåãWiXïŒãŠãŒã¶ãŒã®1人ããã¬ãžã¹ããªãå€æŽããã ãã§ããåçŽãªMSIã·ããªãªã®ãœãªã¥ãŒã·ã§ã³ãå ±æããŸããã åé¡ã¯ãMSI / WiXã§ã¯ã€ã³ã¹ããŒã«ãã©ã«ããŒãèšå®ããå¿ èŠããããšããããšã§ããããšãåäžã®ãã¡ã€ã«ãå ¥ããã«ãã¬ãžã¹ããªã«ããŒãå ¥åããã ãã§ãã§ãã 解決çã¯ããããŒãã©ã«ããŒãèšå®ããŠããããã©ã«ããŒæäœãåé€ããŠãã€ã³ã¹ããŒã«äžã«ãã©ã«ããŒãç©ççã«äœæããªãããã«ããããšã§ãã ããã¯ãã¹ãŠãå±éèŠä»¶ã®ããã§ã¯ãªããMSIã®äžå¯è§£ãªå¶éã®ããã«å¿ èŠã§ãããã©ã«ãããŒãã«ã«ã¯å°ãªããšã1ã€ã®ãšã³ããªãå¿ èŠã§ãã
äžæ¹ãWiXïŒã§ã¯ãã¹ã¿ããã©ã«ããŒã®ãšã³ããªãèªåçã«äœæã§ããMSI / WiXã®è€éããå®å šã«é ããŸãã
var project = new Project("MyProduct", new RegValue(RegistryHive.LocalMachine, "Software\\My Company\\My Product", "Message", "Hello"), new RegValue(RegistryHive.LocalMachine, "Software\\My Company\\My Product", "Count", 777)); project.GUID = new Guid("6f330b47-2577-43ad-9095-1861ba25889b"); Compiler.BuildMsi(project);
äžèšã®ã³ãŒãã«çžåœããWiXã¯ãçŽ40è¡ã®éåžžã«é«å¯åºŠã®XMLã³ãŒãã«å ããŠãWiXã³ã³ãã€ã©ãŒãšãªã³ã«ãŒãèµ·åããããããã¡ã€ã«ã«ãªããŸãã
ãããŒãã©ã«ããŒã¯ãå€ç«ããã±ãŒã¹ã§ã¯ãããŸããã WixïŒã§è§£æ±ºãããMSI / WiXã«ã¯ãä»ã«ãå€ãã®æ§æäžã®ãé害ãããããŸãã
å€ãã®WiXã®é人ã¯ãMSIã¢ãŒããã¯ãã£ãžã®ãã®ãããªè¿æ¥æ§ãWiXã®åã§ãããšèããŠããŸããããã¯ãMSIæ©èœãžã®çµ¶å¯Ÿã¢ã¯ã»ã¹ãæäŸããããã§ãã ç§ã¯åæããŸããã éçºè ã®ããŒãºãç¡èŠããŠãããããããã¯ãã¯ãããžãŒå šäœã®æ¡çšã劚ãããã®ãšç¢ºä¿¡ããŠããŸãã ãããã£ãŠãWiXã¯éçºè æåã§ã¯ãªããå®å šã«MSIæåã§ãã ãããããããWiXã®ããã«ããã¹ãã§ã¯ãããŸããã WiXãããã«ã€ããŠèããå¿ èŠããããã©ãããããç§ã«ã¯ããããŸããã ç§ã®æèŠã§ã¯ãèŠä»¶/ä»æ§ïŒããšãã°ãWixïŒãã¡ã€ã«ïŒãååŸããMSI-DBä»æ§ïŒWiXãã¡ã€ã«ïŒã«å€æããå¥ã®ã¬ã€ã€ãŒãããã«å¿ èŠã§ãã
WiXã¯ãMSIç°å¢ã§ILã.NETã§è¡ãã®ãšåã圹å²ãæãããŸãã ILã¯CLRæ©èœãžã®çµ¶å¯Ÿã¢ã¯ã»ã¹ãæäŸããŸãããéçºã«ã¯èª°ã䜿çšããŸããã ãã®ããã«ããã¹ãŠã®é«ã¬ãã«ã®.NETèšèªããããŸãã ãããã£ãŠã質åããILãåãå ¥ããæ倧ã®é害ã¯äœãããšèšãæãããšãçãã¯ç°¡åã«ãªããŸãã åãå ¥ããå¿ èŠã¯ãããŸããã éçºã«ã¯ãILãããã¯ããã«åªãããªãã·ã§ã³ããããŸãïŒILã¯ãã¹ãŠã®.NETãã¯ãããžãŒã®éèŠãªéšåã§ãããšããäºå®ã«ããããããïŒã WixïŒã¯ããããã®ãæè¯ã®ãªãã·ã§ã³ãã®å°ãªããšã1ã€ãMSIãã¡ã€ã³ã«å°å ¥ããããšããè©Šã¿ã§ãã ãããã£ãŠãWixïŒãŸãã¯ãã®ãããªãœãªã¥ãŒã·ã§ã³ã¯ãWiXã®æ¬¡ã®éçºã¹ãããã«ãããŸããã
InfoQïŒåºæ¬çãªã€ã³ã¹ããŒã«ããã±ãŒãžã®äœæã容æã«ããããšã«å ããŠãWiXïŒã®æãèå³æ·±ãæ©èœã¯äœã§ããïŒ
Oleg ïŒèšåãã䟡å€ã®ããéåžžã«éèŠãªããšãããã€ããããŸãã
1.ãŸã第äžã«ãããã¯ç®¡çãããïŒã«ã¹ã¿ã ïŒã«ã¹ã¿ã ã¢ã¯ã·ã§ã³ã®äžæ» ã®ã·ã³ãã«ãã§ãããé«ã¬ãã«ããã°ã©ãã³ã°èšèªïŒCïŒïŒã®åã«ç±æ¥ããŸãã
using System; using WixSharp; class Script { static void Main() { var project = new Project("CustomActionTest", new ManagedAction("MyAction", Return.check, When.After, Step.InstallInitialize, Condition.NOT_Installed)); Compiler.BuildMsi(project); } } public class CustomActions { [CustomAction] public static ActionResult MyAction(Session session) { MessageBox.Show("Hello World!", "Embedded Managed CA"); session.Log("Begin MyAction Hello World"); return ActionResult.Success; } }
2. UIã Wixã¯ãéåžžã®WinFormsãã€ã¢ãã°ãUIã·ãŒã±ã³ã¹ã«æ¿å ¥ã§ããã ãã§ã¯ãããŸããã ãŸããç¬èªã®GUIãå®å šã«äœæãããããMSIãšã³ãžã³ã©ã³ã¿ã€ã ã«ã¹ãªããããæ©äŒãæäŸããŸãã MSI APIã«ãã£ãŠæäŸããããã®çŽ æŽãããæ©èœã¯ãMicrosoftãå€ãã®è£œåïŒç¹ã«ã€ã³ã¹ããŒã©ãŒOfficeãVisual StudioïŒã§äœ¿çšããŠããã«ãããããããã»ãŒãã¹ãŠã®MSIäœæãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠå®å šã«èŠèœãšãããŠããŸãã
ç§ã¯èªåã®UIãéåžžã«ç©è°ãéžãå±éææ³ãšèããŠãããïŒèšèšäžã®çç±ããïŒéçºè ã«ãã®æ¹æ³ãå§ããŸããã ãããããŠãŒã¶ãŒã®èŠæ±ãç¡èŠããããšã¯ã§ããŸããã§ããããããã§ãå®è£ ããŸããã 以äžã¯ãç¬èªã®UIã®ïŒWixïŒãã£ã¹ããªãã¥ãŒã·ã§ã³ããã®ïŒWPFã®äŸã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãã
3.æåŸã«èšåãããæ©èœã¯ãWixïŒã®æ¡åŒµæ§ã§ãã ãããã€ã¡ã³ãèšè¿°ã¯ãCïŒã¯ã©ã¹ã®åãªã宣èšã§ãã ãã«ããŒã¯ã©ã¹ã䜿çšããŠç°¡åã«æ¹åããéåžžã®ã€ã³ã¹ããŒã«æ¡ä»¶ãç°¡çŽ åãŸãã¯å€æŽã§ããŸãã ããšãã°ããã¹ãŠã®ãã¡ã€ã«ãäžèŠ§è¡šç€ºãã代ããã«ããã©ã«ããŒæ§é ãå®è¡ããŠåçã«å®è¡ããã¯ã©ã¹ïŒAllFilesãªã©ïŒãäœæã§ããŸãã ãããã£ãŠãæ°ããdllãé åžããã±ãŒãžã«å«ããå¿ èŠãããå Žåãã€ã³ã¹ããŒã«ã¹ã¯ãªãããå€æŽããå¿ èŠã¯ãããŸããã
var project = new Project("My App", new Dir(@"%ProgramFiles%\My Company\My App", new AllFiles(@"\\BuildServer\LatestRelease\*.*")));
WixïŒã®æ©èœãååã§ãªãå ŽåãWixïŒã³ã³ãã€ã©ã€ãã³ããã³ãã©ã䜿çšããŠãçæãããXMLïŒWiXïŒã³ã³ãã³ããçŽæ¥æäœã§ããŸãïŒXMLãMSIã³ã³ãã€ã©ã«æž¡ãããçŽåïŒã XMLããªãŒããèŠçŽ ãŸãã¯å±æ§ãè¿œå ãŸãã¯åé€ã§ããŸãã äŸã§ã¯ãçµã¿èŸŒã¿ã®WiXïŒæ©èœã䜿çšããŠASP.NETãµã€ããã€ã³ã¹ããŒã«ããæ¹æ³ãšãã³ã³ãã€ã«ã®çŽåã«å¿ èŠãªXMLãæ¿å ¥ããŠåãããšãè¡ãæ¹æ³ã瀺ããŸãã
ã¡ãªã¿ã«ãWixãã£ã¹ããªãã¥ãŒã·ã§ã³ã®äŸã®æ°ã¯éåžžã«å€ãããã¹ãŠã®Wixã³ãŒãã®ã95ïŒ ã§ãã
Wixã®ã©ã€ããµã€ã¯ã«ã®ãã®æ®µéã§ããã®äž»ãªæ©èœã¯ã»ãŒå®æããŠãããšæããŸãã ãããã£ãŠãæ°ããæ©äŒã¯ãåçŽãããæ°Žå¹³æ¹åã®éçºãæäŸããŸãã äž»ã«ãéçºããŒã«ãšã®çµ±åãšãéçºè åãã®ãã¬ãŒã ã¯ãŒã¯ã®äœ¿ããããã«çŠç¹ãåœãŠãŸãã ç§ã®èšç»ã¯ãNuGetã§WixïŒãå ¬éãïŒ å®äº ã çŽTranslã ïŒãMSIãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®å®å šãªåçç©ãæäŸããŸãããWinFormãã€ã¢ãã°ã®å€éšã»ãããšããŠãNotepad ++çšã®ãã©ã°ã€ã³ãéçºããå Žåã«ãã£ãŠã¯ãããžã§ã¯ããã³ãã¬ãŒãã䜿çšããŠMSBuildã¿ã¹ã¯ãéçºããŸãVisual Studioã¯WixïŒãéåžžã®CïŒãããžã§ã¯ããšããŠæ±ããŸãïŒã ãããŠããã¡ããããŠãŒã¶ãŒã®ãªã¯ãšã¹ããåŠçããŸãã
WixïŒã¯MITã©ã€ã»ã³ã¹ã®äžã§CodePlexã§å©çšå¯èœã§ãã