我有一个用C#编码的软件。这取决于两个(!)第三方DLL需要Visual C ++ 2008和Visual C ++ 2005重新分发。最初安装程序是在InnoSetup中构建的,所有“vs200x_sp1_vcredist_x ??。exe”都嵌入并在安装时运行。但是由于缺少一些高级功能,我们决定迁移到Wix Toolset。
问题是,MSI在一个更受限制的环境中运行,所以我没有弄清楚要求这些可再发行文件正确执行的最佳方法是什么。我试图使用合并模块,但它不起作用 - 我可以看到文件已安装,但依赖walker显示dll仍未链接到正确的版本。
我认为WinSxS至少在这种情况下会让事情变得更糟,因为当我使用合并模块方法时,软件会出现关于“Windows并排配置(14001)”的错误消息。
所以问题是:
有没有办法构建运行安装某些先决条件的exe的MSI?我不介意下载或嵌入这些先决条件。
我知道WinSxS信息存储在dll的清单中。因此,如果我被允许删除第三方公司的清单信息,并使用动态DLL加载,则可以解决问题。但这是合法的吗?因为我需要在msi中直接嵌入Microsoft dll。
我注意到其中一个dll的清单显示其所需的版本是“9.0.21022.8”,但我的MSM文件中的那个是“9.0.30729.6161”。这是问题吗?如果是这样,我可以通过修改清单以允许正确的版本来解决问题吗?无论如何,我认为这不会导致dll无法正常工作。
答案 0 :(得分:0)
msi文件应该只安装您的软件。如果您需要安装先决条件,则应该使用引导程序。 Bootstrapper的职责是安装先决条件,而不是你的msi的任务。
如果你看到wix bootstrapper很复杂,你可以试试像dotnet installer bootstraper这样的简单引导程序。你可以从中下载 http://dblock.github.io/dotnetinstaller/