我想我很快会后悔当天选择使用InstallShield而不是WiX。
我有一些使用WiX的经验,使用起来似乎有点复杂,所以当真正的项目到来时,我选择使用新的Flexera InstallShield LE for Visual Studio 2010。 起初它似乎很容易,我创建并编译了第一个安装项目,没有任何问题。它甚至设法从一些第三方库中提取COM信息(据我所知,它是使用VC 6编译的)。
但是当我向同一个解决方案添加一些InstallShield安装(ISL)项目时,出现了奇怪的问题。如果我编辑一个ISL项目的常规信息页面,然后单击全部保存按钮,突然信息与其他ISL项目的部分混乱,某些字段显示为UNITITIALIZED STRING,有些字段只是混淆。当我打开其他ISL项目时,我看到,那里的信息也搞砸了。唯一的解决方案似乎是在编辑常规信息页面时卸载所有其他ISL项目。
问题二:崩溃。我的项目是一个混合的C ++ / C#应用程序。有时在编辑非托管C ++代码时,Visual Studio会在某些特定操作上崩溃(比如注释掉一些代码块,剪切,粘贴)。我甚至安装了Visual Studio 2010 SP1,但这没有帮助。当我卸载所有ISL项目时,崩溃完全停止了。
无论如何,我很沮丧,现在我有一个选择:
继续使用ISL,创建我自己的可执行文件,它将被安装并运行regsvr32。我仍然不得不忍受Visual Studio崩溃和一般信息页面问题。
转到Windows Installer XML。但我不确定它现在处于什么阶段,我不会遇到同样的问题吗? WiX可以为我注册COM(也可以使用syswow64文件夹中的regsvr32在64位系统上注册32位dll)吗?它在Visual Studio 2010中是否稳定?
我将非常感谢您对我应该做什么的建议 - 留在ISL或转移到WiX,特别是那些在Visual Studio 2010上经验丰富的WiX用户。
答案 0 :(得分:1)
我强烈建议您迁移设置安装程序以使用Windows Installer XML(WiX) 我这几年前做过,从未回头。 :)
Wix v3.5非常稳定。 我与Visual Studio的集成没有任何问题,还有很多其他功能。
它是开源的,社区非常有帮助。
您可以使用heat.exe从文件中提取COM信息。 http://wix.sourceforge.net/manual-wix3/heat.htm
您可以使用内置的Quiet Execution CustomAction在目标计算机上调用regsvr32.exe例如 http://wix.sourceforge.net/manual-wix3/qtexec.htm
该链接还记录了如何运行64位可执行文件。
例如,您可以使用[SystemFolder]属性在c:\ windows \ syswow64中执行文件。
http://msdn.microsoft.com/en-us/library/aa372055.aspx
WiX的DTF技术非常适合在c#中编写msi自定义动作。
HTH。