1

我想我很快就会后悔选择使用 InstallShield 而不是 WiX 的那一天。

我对 WiX 有一些经验,使用起来似乎有点复杂,所以当真正的项目来临时,我选择使用新的 Flexera InstallShield LE for Visual Studio 2010。起初它看起来很简单,我创建并编译了第一个安装项目,没有任何问题。它甚至设法从一些第 3 方库中提取 COM 信息(据我所知,它是使用 VC 6 编译的)。

但是当我在同一个解决方案中添加更多 InstallShield 安装 (ISL) 项目时,出现了奇怪的问题。如果我编辑一个 ISL 项目的一般信息页面,然后单击 Save All 按钮,突然间信息会与其他 ISL 项目的部分混淆,一些字段显示为 UNITITIALIZED STRING,而一些字段只是混淆了。当我打开其他 ISL 项目时,我发现那里的信息也很混乱。唯一的解决方案似乎是在编辑常规信息页面时卸载所有其他 ISL 项目。

问题二:崩溃。我的项目是一个混合的 C++/C# 应用程序。有时在编辑非托管 C++ 代码时,Visual Studio 只是在某些特定操作(如注释掉某些代码块、剪切、粘贴)时崩溃。我什至安装了 Visual Studio 2010 SP1,但这并没有帮助。当我卸载所有 ISL 项目时,崩溃完全停止了。

无论如何,我很沮丧,现在我有一个选择:

  • 留在 ISL,创建我自己的可执行文件,它将被安装并运行 regsvr32。我仍然不得不忍受 Visual Studio 崩溃和一般信息页面问题。

  • 移至 Windows 安装程序 XML。但是我不确定现在是什么阶段,我不会有同样的问题吗?WiX 可以为我注册 COM(也可以使用 syswow64 文件夹中的 regsvr32 在 64 位系统上注册 32 位 dll)吗?Visual Studio 2010 稳定吗?

我非常感谢您对我应该做什么的建议 - 继续使用 ISL 或迁移到 WiX,尤其是那些在 Visual Studio 2010 上经验丰富的 WiX 用户的建议。

4

1 回答 1

1

我强烈建议您迁移安装程序以使用 Windows Installer XML (WiX)。
几年前我就这样做了,而且从未回头。:)

Wix v3.5 非常稳定。我在它与 Visual Studio 的集成以及许多其他功能中没有遇到任何问题。

它是开源的,社区非常有帮助。

您可以使用 heat.exe 从文件中提取 COM 信息。 http://wix.sourceforge.net/manual-wix3/heat.htm

例如,您可以使用内置的 Quiet Execution CustomAction
http://wix.sourceforge.net/manual-wix3/qtexec.htm在目标机器上调用 regsvr32.exe

该链接还记录了如何运行 64 位可执行文件。

例如,您可以使用 [SystemFolder] 属性来执行 c:\windows\syswow64 中的文件。
http://msdn.microsoft.com/en-us/library/aa372055.aspx

WiX 的 DTF 技术非常适合在 c# 中编写 msi 自定义操作。

HTH。

于 2011-06-22T07:23:12.370 回答