标签: burn

在 WiX 捆绑包中,如果找不到注册表项,如何阻止捆绑包启动?

我需要编写一个 WiX 捆绑包,除非系统上存在某个注册表项,否则该捆绑包不会运行。

\n\n

在正常的安装项目中,我会使用启动条件,但我不创作安装项目,而只是创作顶级包。该<Bundle>元素有一个Condition属性,但在 Burn 手册中它说:

\n\n
\n

捆绑的状况。如果不满足条件,捆绑包将拒绝运行。在加载引导程序应用程序之前(检测之前)检查条件,因此只能引用内置变量,例如指示操作系统版本的变量。

\n
\n\n

因此,看来除了最基本的高级检查之外,我不能使用元素Condition的 \xc2\xa0 属性进行任何操作,当然也不能用于我需要的功能。Bundle

\n\n

那么,如何在捆绑包级别检查注册表项,并在该项不存在时拒绝继续?

\n

installation wix burn

2
推荐指数
1
解决办法
527
查看次数

ExePackage RemotePayload哈希值问题

我已经使用 ExePackage 和 RemotePayload 实现了先决条件,因为我需要使用运行时 webinstaller (DownloadURL) 下载包。但是,当软件包在某个时间(例如季度更新)后升级时,软件包版本和哈希值也会发生变化。因此,我收到类似 0x80091007 的错误(哈希值不正确)。因此,如果有人知道如何忽略哈希值检查,请帮助我。下面是我已经实现的代码:

<ExePackage
Id="MicrosoftEdgeWebview2"
DisplayName="Microsoft Edge Webview2 Runtime"
Compressed="no"
Cache="no"
PerMachine="yes"
Vital ="yes"
Permanent ="yes"
InstallSize="1"
InstallCommand="/silent /install"
DetectCondition="MicrosoftEdgeWebview2Version &gt;= $(var.MicrosoftEdgeWebview2MinimumVersion) OR MicrosoftEdgeWebview2Version64 &gt;= $(var.MicrosoftEdgeWebview2MinimumVersion)"
Name="MicrosoftEdgeWebview2Setup.exe"
DownloadUrl="https://go.microsoft.com/fwlink/p/?LinkId=2124703">
<RemotePayload
               ProductName="Microsoft Edge Webview2 Runtime"
               Description="Microsoft Edge Webview2 Runtime Setup"
               Hash="080e3e4cdcfc809762a32e8fa7cdc0f37b8e36a5"
               Size="1778968" Version="1.3.153.47" />
Run Code Online (Sandbox Code Playgroud)

wix burn

2
推荐指数
1
解决办法
404
查看次数

尝试捆绑.NET框架依赖时,WiX无法找到文件

在尝试构建依赖于.NET 4框架的Burn引导程序时,我遇到了一个奇怪的错误.我已经下载了WiX设置的源代码并将其包含NetFx.wxs在我的项目中并在Chain中添加了PackageGroupRef,但是我收到以下错误:

错误LGHT0103:系统找不到文件'dotNetFx40_Full_x86_x64.exe'

档案Netfx.wxs:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
    <Fragment>
        <WixVariable Id="WixMbaPrereqPackageId"
                     Value="Netfx4Full" />

        <WixVariable Id="WixMbaPrereqLicenseUrl"
                     Value="NetfxLicense.rtf" />

        <util:RegistrySearch Root="HKLM"
                             Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
                             Value="Version"
                             Variable="Netfx4FullVersion" />

        <util:RegistrySearch Root="HKLM"
                             Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
                             Value="Version"
                             Variable="Netfx4x64FullVersion"
                             Win64="yes" />

        <PackageGroup Id="Netfx4Full">

            <ExePackage Id="Netfx4Full"
                        Cache="no"
                        Compressed="no"
                        PerMachine="yes"
                        Permanent="yes"
                        Vital="yes"
                        SourceFile="dotNetFx40_Full_x86_x64.exe"
                        DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193"
                        DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" />

        </PackageGroup>
    </Fragment>
</Wix>
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

wix burn wix3.6

1
推荐指数
2
解决办法
2437
查看次数

wix bootstrapper

我使用WPF编写了一个托管的wix bootstrapper.实际安装步骤需要链接多个msi/exe和批处理文件.

<Chain>
 <MsiPackage SourceFile="xxx"/>
 <ExePackage Id="Test" SourceFile="..\TestBatch.bat" Vital="yes"/>
 <MsiPackage SourceFile="yyy"/>
</Chain>
Run Code Online (Sandbox Code Playgroud)

在执行每个包期间,应该显示一条消息(最好来自引导程序UI),指示当前正在执行哪个msi/exe包/批处理文件.简而言之,引导程序中需要一个ProgressText如何实现这一点?

另一个问题:我不希望所有的msi被打包到bootstrapper exe中.这是因为:每次更改msi时,我们只想发送更新/修改的msi,而不是整个bootstrapper exe.有没有办法做到这一点?

wix burn wix-extension wix3.6

1
推荐指数
1
解决办法
1661
查看次数

WiX <util:CloseApplication>元素无效

我正在运行WiX捆绑包安装.如果运行,其中一个MSI软件包应该关闭应用程序:

<util:CloseApplication Id="CloseApplication" Target="My App.exe">1</util:CloseApplication>
Run Code Online (Sandbox Code Playgroud)

这是<Product>元素之前的<Feature>元素.我添加了1以确保条件为真.

MSI日志有这样的说法:

MSI (s) (14:94) [21:30:13:979]: Doing action: WixCloseApplications
Action ended 21:30:13: CreateFolders. Return value 1.
MSI (s) (14:68) [21:30:13:993]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI5D24.tmp, Entrypoint: WixCloseApplications
MSI (s) (14!CC) [21:30:14:023]: PROPERTY CHANGE: Adding WixCloseApplicationsDeferred property. Its value is 'My App.exe2'.
Action start 21:30:13: WixCloseApplications.
MSI (s) (14!CC) [21:30:14:023]: Doing action: WixCloseApplicationsDeferred
Action start 21:30:14: WixCloseApplicationsDeferred.
Action ended 21:30:14: WixCloseApplicationsDeferred. Return value 1.
MSI (s) (14:94) [21:30:14:052]: Doing …
Run Code Online (Sandbox Code Playgroud)

windows-installer wix burn

1
推荐指数
1
解决办法
3071
查看次数

WiX Burn bootstrapper不会卸载MSI包

我创建了一个成功安装所有链接包的Wix Burn boostrapper.当我运行卸载时,它不会卸载以下MSI包.为什么?此外,我意识到这个问题已被提出,但以前提出的问题似乎都没有答案.

<MsiPackage Id="SyncManager" Name="Sync Manager 2.0" Permanent="yes" Vital="yes" Compressed="yes"
              DownloadUrl="http://localhost/SyncManager2.0.msi" SourceFile="SyncManager2.0.msi">
    <Payload DownloadUrl="http://localhost/SyncManager2.0.msi" SourceFile="SyncManager2.0.msi" Name="Synce Manager 2.0" />
</MsiPackage>
Run Code Online (Sandbox Code Playgroud)

先感谢您.

windows-installer wix burn

1
推荐指数
1
解决办法
1232
查看次数

Wix 产品代码、升级代码和组件 GUID

所有平台的安装程序的升级代码和产品代码是否必须相同?

我们应该为不同平台的组件使用不同的 GUID 吗?我将 msi 捆绑在burn bootstrapper 中。

wpf wix burn

1
推荐指数
1
解决办法
1527
查看次数

如何在刻录中比较 DetectCondition 中的版本变量(wix)

这是我的 Fragment

<Fragment>
    <Variable Name="Hasp_BundleVersion" Value="7.54.8889.1" />
    <Variable Name="Hasp_IsInstalled" />
    <Variable Name="Hasp_InstalledVersion" />

    <util:RegistrySearch Id="Hasp_IsInstalled"
                         Variable="Hasp_IsInstalled"
                         Root="HKLM"
                         Key="SOFTWARE\Aladdin Knowledge Systems\HASP\Driver\Installer"
                         Value="Version"
                         Result="exists" />

    <util:RegistrySearch Condition="Hasp_IsInstalled"
                         After="Hasp_IsInstalled"
                         Variable="Hasp_InstalledVersion"
                         Root="HKLM"
                         Key="SOFTWARE\Aladdin Knowledge Systems\HASP\Driver\Installer"
                         Value="Version"
                         Result="value" />

    <PackageGroup Id="Hasp">
        <ExePackage Id="Hasp"
                    DisplayName="Hasp"
                    SourceFile="setups\HASPUserSetup.exe"
                    Compressed="yes"
                    DetectCondition="Hasp_IsInstalled AND Hasp_InstalledVersion &gt;= Hasp_BundleVersion"
                    InstallCommand="/s /v/qn"
                    PerMachine="yes"
                    Permanent="yes" />
    </PackageGroup>
</Fragment>
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它似乎将两个值作为字符串进行比较。这是日志:

[0A74:0A4C][2017-03-29T16:29:02]i000: Initializing string variable 'Hasp_BundleVersion' to value '7.54.8889.1'
[0A74:0A4C][2017-03-29T16:29:02]i000: Setting numeric variable 'Hasp_IsInstalled' to value 1
[0A74:0A4C][2017-03-29T16:29:02]i000: Setting string variable 'Hasp_InstalledVersion' to value '7.54.66980.1'
[0A74:0A4C][2017-03-29T16:29:02]i052: Condition …
Run Code Online (Sandbox Code Playgroud)

wix version burn

1
推荐指数
1
解决办法
3208
查看次数

在MSI中使用[SourceDir]进行WiX自定义操作和刻录

我们的安装程序使用CustomAction(在InstallExecuteSequence中调用)可选地从安装程序旁边的目录中复制用户配置文件.这使用[SourceDir]来定位源目录.

我们目前有32位和64位版本,它们作为单独的.MSI文件分发.我正在尝试使用Burn构建包含这些.MSI文件的单个.EXE.显然当Burn安装了MSI时,它的[SourceDir]位于其他地方(我看到了C:\ProgramData\Package Cache\...路径),所以这个自定义动作不起作用.

我找到了WixBundleOriginalSource变量,但我的问题是我希望MSI文件能够独立工作并与Burn一起打包.我认为我需要有条件地将变量设置为WixBundleOriginalSource(如果已定义(用户使用Burn .exe))或者如果未定义WixBundleOriginalSource(用户直接安装.MSI)则将SourceDir设置为SourceDir,然后将此变量传递给我的自定义操作.(我知道WixOriginalSource是安装程序的完整路径,而不是它所在的目录 - 我可以在我的自定义操作中处理它.)

这可能吗?如果是这样,请帮我解释一下语法.

更新:

我可能会在自定义操作中处理条件部分,并调用它两次:一次使用[SourceDir](直接使用MSI时有效),正如我现在所做的那样:

在我的产品中

    <CustomAction Id='CopyConfigFiles'
                  FileKey="MyInstallationUtility"
                  ExeCommand="COPYFILES [SourceDir]"
                  Execute="deferred"
                  Impersonate="no"
                  Return="ignore" />
Run Code Online (Sandbox Code Playgroud)

......和一次WixBundleOriginalSource.但是,我找不到办法让WixBundleOriginalSource我自定义动作.使用:

                  ExeCommand="COPYFILES [WixBundleOriginalSource]"
Run Code Online (Sandbox Code Playgroud)

......不起作用.使用:

在我的Burn Bundle中

    <WixVariable Id="ConfigFileLocation" Value="[WixBundleOriginalSource]" />
Run Code Online (Sandbox Code Playgroud)

在我的产品中

                  ExeCommand="COPYFILES [ConfigFileLocation]"
Run Code Online (Sandbox Code Playgroud)

......也行不通.两者都给我一个空字符串作为参数.

wix burn

0
推荐指数
1
解决办法
1939
查看次数

Wix刻录不允许删除文件

我正在创建一个bootsrapper,我想删除在安装过程中创建的链接.所以我写下面的步骤:

<Chain>
  ...
  <ExePackage Id="removelnk" Cache="no" SourceFile="run.bat" InstallCommand="del &quot;C:\Users\Public\Desktop\Parity UI.lnk&quot;" />
</Chain>
Run Code Online (Sandbox Code Playgroud)

其中run.bat仅仅是%*允许的描述来运行任意代码在这里.

但是,它不起作用:

[19EC:0E2C][2018-06-16T18:32:27]i301: Applying execute package: removelnk, action: Install, path: C:\ProgramData\Package Cache\1608BB75347CD8C40187E5F3C0A969ED73A98D51\run.bat, arguments: '"C:\ProgramData\Package Cache\1608BB75347CD8C40187E5F3C0A969ED73A98D51\run.bat" del "C:\Users\Public\Desktop\Parity UI.lnk"'
[19EC:0E2C][2018-06-16T18:32:27]e000: Error 0x80070001: Process returned error: 0x1
[19EC:0E2C][2018-06-16T18:32:27]e000: Error 0x80070001: Failed to execute EXE package.
[0AE4:2B94][2018-06-16T18:32:27]e000: Error 0x80070001: Failed to configure per-machine EXE package.
[0AE4:2B94][2018-06-16T18:32:27]i319: Applied execute package: removelnk, result: 0x80070001, restart: None
[0AE4:2B94][2018-06-16T18:32:27]e000: Error 0x80070001: Failed to execute EXE package.
Run Code Online (Sandbox Code Playgroud)

如果我从登录中执行此命令,cmd那么它按预期工作.它甚至没有管理员权限. …

installer windows-installer wix burn

0
推荐指数
1
解决办法
383
查看次数