替代WiX Burn Bootstrapper? (可以使用InstallShield LE引导程序吗?)

时间:2013-01-21 03:07:26

标签: visual-studio-2010 wix windows-installer installshield nsis

背景资料:

我们曾经有一个基于Visual Studio 2010的安装程序项目,但我们的安装情况变得更加复杂,并且随着项目在2012年消失,我们认为我们已经开始学习WiX / InstallShield LE

问题:

InstallShield LE在它创建的MSI文件中似乎太有限了以满足我们的需求 - (例如,如果您检查Office 2007先决条件,即使错误表明您需要“Office 2007或更高版本”它如果您安装了Office 2010,则会失败 - 您可以检查其中一个,但是您无法创建OR条件 - 还有更多的东西只是冰山一角)。 - 另一方面,它创造的引导程序非常棒!

另一方面,WiX非常适合制作我们的MSI,但是Burn Bootstrapper只是令人头痛的问题 - 我们终于让它发挥作用 - 但现在在我们客户的盒子上,它不仅没有成功当它启动MSI文件时提升,但它被Symantec SONAR检测为病毒,并且无论如何都会阻止安装! (这不会发生在InstallShield LE上,并且代码签名证书对于这个项目来说太昂贵了。)老实说,我不想使用Burn Bootstrapper。

问题:

WiX Burn Bootstrapper有哪些替代品?可以使用InstallShield LE吗?那么NSIS呢? (它是否与Visual Studio 2010 / Visual Studio 2012完全集成?) - 我希望能够安装我们先决条件的Web安装以保持安装程序文件的大小 - 是的,我还必须维护.MSI (否则,我现在只需切换到全面的NSIS。)

分辨率:

虽然我无法使Christopher Painter's solution工作,但我将其标记为答案,因为我认为这是建议的最佳方法。我选择了pretty evil little hack解决方案,但如果你能让克里斯托弗的方法发挥作用,我认为这是可行的方法。如果你做不到,也许我的黑客会让你失意。

4 个答案:

答案 0 :(得分:4)

大约2K美元,您可以升级到InstallShield Professional。但是,如果您对ISLE感到满意并且只能使用1个功能且没有自定义UI,我可以为您解决有关启动条件的问题。

请参阅我的博客文章:

Augmenting InstallShield using Windows Installer XML - Certificates

概念是您创作一个WiX合并模块,该模块搜索两个办公室版本并安排在逻辑或条件中使用两个搜索的错误自定义操作(MSI类型19)。将它添加到您的ISLE项目中,您只是“混合”了这两种技术。

Professional还为您提供了PRQ(XML prereq文件)编辑器。然后再将30天eval投入VM可以得到相同的结果。

以下是WXS方面:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Module Id="ISWIX.REQUIRE.MSOFFICE20102013" Language="1033" Version="1.0.0.0">
        <Package Id="10ed24f2-6c07-4066-9f39-ba9f66c2667b" Manufacturer="ISWIX, LLC" InstallerVersion="200" />
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="MergeRedirectFolder"/>
        </Directory>
        <Property Id="OFFICE2010FOUND">
            <RegistrySearch Id="findOffice2010" Root="HKLM" Key="SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot" Name="Path" Type="raw" />
        </Property>
        <Property Id="OFFICE2010X64FOUND">
            <RegistrySearch Id="findOffice2010X64" Root="HKLM" Key="SOFTWARE\Microsoft\Office\14.0\Common\InstallRoot" Name="Path" Type="raw" Win64="yes" />
        </Property>
        <Property Id="OFFICE2013FOUND">
            <RegistrySearch Id="findOffice2013" Root="HKLM" Key="SOFTWARE\Microsoft\Office\15.0\Common\ProductVersion" Name="LastProduct" Type="raw" />
        </Property>
        <CustomAction Id="ErrorNoOffice20102013" Error="[ProductName] setup requires Microsoft Office 2010 or 2013." />
        <InstallUISequence>
            <Custom Action="ErrorNoOffice20102013" After="AppSearch">Not OFFICE2010FOUND and Not OFFICE2010X64FOUND and Not OFFICE2013FOUND and Not Installed</Custom>
        </InstallUISequence>
        <InstallExecuteSequence>
            <Custom Action="ErrorNoOffice20102013" After="AppSearch">Not OFFICE2010FOUND and Not OFFICE2010X64FOUND and Not OFFICE2013FOUND and Not Installed</Custom>
        </InstallExecuteSequence>
    </Module>
</Wix>

答案 1 :(得分:2)

我想解决你提出的关于Burn的所有问题。如果您可以在问题上提出错误,那将非常有用。

与此同时,如果你使用的是WiX工具集v3.5 +,你可能会看一下setupbld.exe。该工具可以创建一个微小的pre-req安装程序,启动pre-req然后启动单个MSI。

注意:我们在WiX工具集中的目标是最终包含该工具对Burn的作用,因此非常感谢Burn不起作用的错误报告。

答案 2 :(得分:0)

NSIS可以通过名为Visual & Installer的插件与Visual Studio(2005/2008/2010和2012)集成。也支持Inno Setup。如果您正在寻找简单而廉价的解决方案(NSIS和Inno Setup都是具有庞大社区的免费软件系统。)

我没有使用WiX的经验,但NSIS和Inno安装程序无法创建MSI个文件,只能创建EXE个文件。

答案 3 :(得分:0)

最后,Install Shield LE对我来说太过头疼了,我最终做的是创建一个具有正确先决条件的旧学校2010 dummy .vdproj安装项目(Windows安装程序3.1,.NET 4.0和VSTO 2010)。

我构建了一次,并且窃取了setup.exe(我确保升级代码等其他内容与我当前基于WiX的.msi文件相匹配 - 它生成的.msi与我想要的名称相同使用等)。

我使用基于WiX的.msi文件打包setup.exe,一切都很好 - 这绝对是一个巨大的黑客 - 但它是我能找到的唯一解决方案,它们都开箱即用(-ish),并没有引爆赛门铁克SONAR反病毒。

我不是每次都构建.vdproj(我只构建了一次,我删除了.msi文件,并收集了setup.exe),因此Visual Studio 2010将来没有依赖此路由。

对于一个不那么黑客的方法,请参阅@Christopher Painter的答案 - 如果你能让他的方法为你工作,我推荐他的方法超过我的。