【问题标题】:Alternatives to WiX Burn Bootstrapper? (Can the InstallShield LE bootstrapper be used?)WiX Burn Bootstrapper 的替代品? (可以使用 InstallShield LE 引导程序吗?)
【发布时间】:2013-01-04 02:43:34
【问题描述】:

背景资料:

我们曾经有一个基于 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 完全集成?)——我希望对我们的先决条件进行网络安装以减小安装程序文件的大小——是的,我还必须维护 .MSI (否则,此时我将切换到完全开启的 NSIS)。

分辨率:

虽然我无法让Christopher Painter's solution 工作,但我将其标记为答案,因为我相信这是建议的最佳方法。我选择了pretty evil little hack 的解决方案,但如果你能让克里斯托弗的方法奏效,我认为这就是要走的路。如果你不能,也许我的 hack 会让你摆脱困境。

【问题讨论】:

  • 顺便说一句,接受的答案和赞成票表示赞赏。查阅 RFP 更是如此。 :)
  • +1 FWIW,我认为您很好地描述了您的问题并提前列出了具体条件(事实证明,没有人需要在这个 cmets 区域提出其他问题.. .)
  • 病毒检查器烧录误报的唯一问题是什么?如果病毒检查程序导致问题,则提升失败很可能是这种情况的症状(因为大多数病毒检查程序会阻止/终止他们怀疑是病毒的进程)。
  • @BrainSlugs83 从外部不清楚为什么 Burn 可执行文件会被选中。在这些 cmets 中的一些全部弹出后,我将可执行文件发送给所有主要供应商,以便他们可以更新他们的签名。从那时起,这个问题似乎已经减少了很多,现在通常是过时的防病毒产品出现问题。此外,签署 Bundle 似乎总是可以避免工具误报。如果我们可以在 WiX 工具集中做更多事情,我们会去做。目前尚不清楚那是什么......或者这仍然是一个主要问题。
  • @BrainSlugs83 大约一个月前。

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


【解决方案1】:

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

我对 WiX 没有任何经验,但 NSIS 和 Inno Setup 无法创建 MSI 文件,只能创建 EXE 文件。

【讨论】:

  • 我需要构建基于 MSI 的安装程序 - 可执行文件非常适合最终用户,因为他们可以安装 prereqs 等等,但管理员需要能够部署 MSI。
【解决方案2】:

我想解决您提出的有关 Burn 的所有问题。如果您可以针对这些问题提交错误,那将非常有帮助。

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

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

【讨论】:

  • PS:我已将 Burn 引擎提交到赛门铁克的白名单。希望这将帮助他们减少误报。
  • 谢谢,罗伯! -- 我可能会在几个月后重新审视这个问题 -- 我会让你知道它是怎么回事,如果问题仍然存在,我会在那时提交错误。
【解决方案3】:

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

我构建了一次,然后偷走了 setup.exe(我确保升级代码等其他内容与我当前基于 WiX 的 .msi 文件匹配——它生成的那个 .msi 与我想要的名称相同使用等)。

我将 setup.exe 与基于 WiX 的 .msi 文件打包在一起,一切正常——这绝对是一个巨大的 hack——但这是我能找到的唯一解决方案,两者都开箱即用(-ish),并且不会触发 Symantec SONAR 防病毒。

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

对于不那么老套的方法,请参阅@Christopher Painter 的回答——如果你可以让他的方法适合你,我推荐他的方法而不是我的方法。

【讨论】:

    【解决方案4】:

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

    查看我的博客文章:

    Augmenting InstallShield using Windows Installer XML - Certificates

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

    Professional 还为您提供 PRQ(XML prereq 文件)编辑器。然后再次在 VM 上进行 30 天评估可以得到相同的结果。

    这是它的 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>
    

    【讨论】:

    • 我还没有真正看到任何 MSE 项目的例子——他们能做 MSI 能做的所有事情吗? ISLE 构建的 setup.exe 会在调用我的 WiX 构建的 MSE 之前预加载我的先决条件吗?在 VM 上使用 IS-PRO,如果我编辑 XML,ISLE 是否能够打开 IS-PRO 生成的项目(并正确构建它?)——顺便说一句——我可以手动编辑 ISLE 项目文件吗?并以这种方式修复条件?
    • 我更新为包含 WXS 端。对于 InstallShield,您必须转到可再发行组件并添加模块(如果它不在您的搜索路径中,您可能需要浏览到它的位置)
    • 基本上这会构建一个 MSM (C/C++ .LIB),用作业务规则的一种封装形式。然后,您可以将其添加到一个或多个安装程序以实现该行为。如果您需要更多信息,我今天可以为您提供 15 分钟的电话会议/屏幕共享会议。
    • ISLE 不能使用 MSM 文件?我不会相信你在互联网上读到的一切。大多数发帖的人都是不认真对待设置开发的应用程序开发人员。在解决方案资源管理器中,转到您的 ISLE 项目并展开 (2) 指定应用程序数据。双击可再发行组件。右键单击出现的列表并选择浏览合并模块。
    • 您的其他 preqeq 之一必须表达对 .NET 3.5 prereq 的依赖。如果您明确添加它,您应该能够对订单进行排序。是的,引导和链接是复杂的东西。 ISLE 不提供 prereq 编辑器,所以如果它不能开箱即用,你就会陷入困境。这可能是也可能不是适合您的工具。不看你的整个情况很难说。也就是说,我使用 ISLE 完成了非常复杂的工作,但我又是一个特别的疯子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2012-01-31
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多