【问题标题】:WiX BootstrapperWiX 引导程序
【发布时间】:2016-06-21 00:34:31
【问题描述】:

我正在尝试为简单的 .NET WPF C# 应用程序创建安装程序。我正在使用 VS 2013 和 WiX 3.10.2。按照 Wix Tutotial/.NET/ Bootstrapping 中的步骤,我创建了一个 Boostrap.exe,它链接了 .NET Web 安装程序和应用程序 Setup.msi。

编辑:我的目标是了解如何为小更新、小升级和大升级场景配置 WiX Bootstrap 和设置项目。

开箱即用,当我运行全新安装时,一切似乎都运行良好。但是,当我在已经存在的安装上运行全新构建的 Bootstrap.exe 时,应用程序和功能中会出现一个重复的条目,并且应用程序目标位置中没有文件更改 - 与预期相同的条目应该保留在应用程序和功能相反功能和目标位置应更新。 编辑:看起来可能无法更改 REINSTALLMODE?

如果我添加一个产品 ID,然后更改安装程序的版本(小升级),引导程序失败,用户取消安装?日志文件显示“错误 0x80070642:未能执行 MSI 包的次要升级。” 编辑:在 MSI 日志中,SecureRepair 失败并出现错误代码 39439E438 (?) 可能是因为存储的哈希值与当前的不匹配......但这应该在小升级 MSI 中预期,对吧?

在 Boostrapper 和 Setup WiX 项目之间是否有推荐的配置,以便可以正确处理小更新、小升级和主要升级用例,或者 WiX Bootstrapper 是否仅支持主要升级?

我将继续调查并发布我的调查结果的更新;

非常感谢任何提示, 谢谢!

以下是我从 WiX 向导生成的代码中几乎没有更改的源文件:

--- Product.wxs ---

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="SetupProject1 1.0.0.0" Language="1033" Version="1.0.0.0" Manufacturer="Acme" UpgradeCode="4c8a8cbf-e3d0-410c-8a8d-7e67eb4e7ff7">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" InstallPrivileges="limited" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

    <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
        <ComponentGroupRef Id="ProductComponents" />
    </Feature>
</Product>

<Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="LocalAppDataFolder">
            <Directory Id="AcmeFolder" Name="Acme">
                <Directory Id="INSTALLFOLDER" Name="WpfApplication1" />
            </Directory>
        </Directory>
    </Directory>
</Fragment>

<Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
        <Component Id="ProductComponent" Guid="8CA0B70F-39DA-4B4B-9104-46C58E26FCF4">
            <CreateFolder/>
            <RemoveFolder Id="RemoveAcmeFolder" Directory="AcmeFolder" On="uninstall"/>
            <RemoveFolder Id="RemoveINSTALLFOLDER" On="uninstall" />
            <RegistryValue Root="HKCU" Key="Software\Acme\WpfApplication1" Name="Version" Type="string" Value="[ProductVersion]" KeyPath="yes" />
            <File Source="$(var.WpfApplication1.TargetPath)" KeyPath="no" />
        </Component>
    </ComponentGroup>
</Fragment>

--- Bundle.wxs ---

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
 xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">

<Bundle Name="Bootstrapper1 1.0.0.0" Version="1.0.0.0" Manufacturer="Acme" UpgradeCode="e1092cbb-9134-42fc-a9f2-652f95f361fd">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />

    <Chain>
        <MsiPackage Name="Acme Setup" SourceFile="$(var.SetupProject1.TargetPath)" Vital="yes" />
    </Chain>
</Bundle>

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:
    • 如果您更改可执行文件,请增加其版本号。 Windows Installer 假定具有相同版本的文件是相同的。

    • 要升级 .msi 包,请增加其版本号作为主要升级(典型)或次要升级的一部分。

    • 要升级捆绑包,请增加其版本号。默认情况下,Burn 会保留安装了相同版本的捆绑包。

    【讨论】:

    • 谢谢鲍勃。我知道理论上产品变化分为三类(小更新、小升级、大升级)。我试图发现的是如何配置我的 WiX 解决方案以实现其中任何一项。我正在考虑在开发过程中进行小更新,小升级将是官方的错误修复或功能添加版本,而大升级将是新版本操作/布局与旧版本不兼容,或者两个版本可以存在并工作时并排。这有意义吗?
    • 文档提示我可以使用 REINSTALLMODE 代码来控制文件的更新方式。例如,即使目标文件是相同的版本,“e”代码也会重新安装。 WiX 中的 REINSTALLMODE 控制在哪里?
    • Burn 负责重新安装模式。关于升级类型,请参阅joyofsetup.com/2008/12/29/neither-more-nor-less。除非您有特殊需求,否则您可以忽略除重大升级之外的所有内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多