【发布时间】:2017-09-21 01:13:03
【问题描述】:
我的挫败感接近 10。我已经在 wix 安装程序上工作了几个星期了。此安装程序为我们的软件安装先决条件。我没有 Visual Studio,所以我制作了一个批处理文件来构建(仅读取命令行)wix 项目。此捆绑包中有大约 9 个先决条件,包括 .msi、.msu 和 .exe 文件。
我的问题具体涉及链元素中描述的 ExePackage。似乎有几个(但不是全部)ExePackages 总是安装不管 DetectCondition、InstallCondition、安装和 Unistall。日志文件显示 DetectCondition = true 和 InstallCondition = false 但这些问题 ExePackages 仍然执行和安装。每一个。时间。
在过去两周的挫折中,我在 stackoverflow 的某个地方读到,ExePackages 不允许安装程序与 .msi 文件具有相同的可见性,这可能会导致我正在处理的问题出现问题。我似乎记得有人提到在卸载时如何执行 ExePackage,如果实际的 .exe 文件没有正确的内部标志,它将安装而不是卸载。但是,如果我没记错的话,虽然这些答案对他们的问题很有帮助,但我还没有找到完全阻止在某些条件下执行 ExePackage 的东西。
编辑 1:我使用的是 WiX 3.7 版。
我想要一个示例或一些生命线,让我知道如何执行此操作。下面是一个问题 ExePacakge 的例子:
...
<Bundle Name='MySoftware' Version='1.0.0.0' Manufacturer='MyCompany'
UpgradeCode='{GUID}'
Condition='(VersionNT >= v6.1 AND ServicePackLevel >= 1)'>
...
<util:FileSearch Id='CheckChromeVersion' Path='[ProgramFilesFolder]Google\Chrome\Application\chrome.exe' Variable='CHROMEVERSION' Result='version' />
<util:FileSearch Id='CheckChromeExists' Path='[ProgramFilesFolder]Google\Chrome\Application\chrome.exe' Variable='CHROMEEXISTS' Result='exists' />
...
<Chain>
...
<ExePackage Id='Chrome'
Compressed='yes'
SourceFile='.\installers\ChromeStandaloneSetup64-v51.0.2704.103.exe'
PerMachine='yes'
DetectCondition='CHROMEEXISTS AND CHROMEVERSION="51.0.2704.103"'
InstallCondition='(NOT CHROMEEXISTS) OR (NOT CHROMEVERSION="51.0.2704.103")' />
...
</Chain>
</Bundle>
...
以下是日志文件中的所有“chrome”实例:
[0910:0794][2017-09-20T06:30:33]i000: Setting numeric variable 'CHROMEEXISTS' to value 1
[0910:0794][2017-09-20T06:30:33]i000: Setting version variable 'CHROMEVERSION' to value '51.0.2704.103'
[0910:0794][2017-09-20T06:30:33]i052: Condition 'CHROMEEXISTS AND CHROMEVERSION="51.0.2704.103"' evaluates to true.
[0910:0794][2017-09-20T06:30:33]i101: Detected package: Chrome, state: Present, cached: None
[0910:0794][2017-09-20T06:30:34]i052: Condition '(NOT CHROMEEXISTS) OR (NOT CHROMEVERSION="51.0.2704.103")' evaluates to false.
[0910:0794][2017-09-20T06:30:34]w321: Skipping dependency registration on package with no dependency providers: Chrome
[0910:0794][2017-09-20T06:30:34]i000: Setting string variable 'WixBundleLog_Chrome' to value 'C:\Users\User\AppData\Local\Temp\MyProgram_20170920063033_2_Chrome.log'
[0910:0794][2017-09-20T06:30:34]i000: Setting string variable 'WixBundleRollbackLog_Chrome' to value 'C:\Users\User\AppData\Local\Temp\MyProgram_20170920063033_2_Chrome_rollback.log'
[0910:0794][2017-09-20T06:30:34]i201: Planned package: Chrome, state: Present, default requested: Absent, ba requested: Absent, execute: Uninstall, rollback: Install, cache: Yes, uncache: Yes, dependency: None
[01B4:0E6C][2017-09-20T06:30:54]i305: Verified acquired payload: Chrome at path: C:\ProgramData\Package Cache\.unverified\Chrome, moving to: C:\ProgramData\Package Cache\9102865AE2381BC34E91C107DA5818CF971356E8\ChromeStandaloneSetup64-v51.0.2704.103.exe.
[01B4:0F1C][2017-09-20T06:31:19]i301: Applying execute package: Chrome, action: Uninstall, path: C:\ProgramData\Package Cache\9102865AE2381BC34E91C107DA5818CF971356E8\ChromeStandaloneSetup64-v51.0.2704.103.exe, arguments: '"C:\ProgramData\Package Cache\9102865AE2381BC34E91C107DA5818CF971356E8\ChromeStandaloneSetup64-v51.0.2704.103.exe"'
[0910:0794][2017-09-20T06:31:33]i319: Applied execute package: Chrome, result: 0x0, restart: None
[01B4:0F1C][2017-09-20T06:31:59]i351: Removing cached package: Chrome, from path: C:\ProgramData\Package Cache\9102865AE2381BC34E91C107DA5818CF971356E8\
[0910:0794][2017-09-20T06:32:02]i410: Variable: CHROMEEXISTS = 1
[0910:0794][2017-09-20T06:32:02]i410: Variable: CHROMEVERSION = 51.0.2704.103
[0910:0794][2017-09-20T06:32:02]i410: Variable: WixBundleLog_Chrome = C:\Users\User\AppData\Local\Temp\MyProgram_20170920063033_2_Chrome.log
[0910:0794][2017-09-20T06:32:02]i410: Variable: WixBundleRollbackLog_Chrome = C:\Users\User\AppData\Local\Temp\MyProgram_20170920063033_2_Chrome_rollback.log
提前感谢您的帮助。
【问题讨论】:
-
对于
InstallCondition:如果条件评估为假并且正在安装、修复或修改包,则将卸载包。这意味着它应该尝试卸载包,但没有给出卸载命令。我想这意味着捆绑包正在使用安装程序忽略的一些参数执行安装程序。尝试使用删除ChromeStandaloneSetup64-v51.0.2704.103.exe所需的任何参数添加UninstallCommand(如果可能的话)。 -
实际上,我认为您可以删除
InstallCondition,因为只有在DetectCondition评估为假(或被省略)时,捆绑包才会安装包。 “Burn 使用此条件来确定在捆绑操作期间如何处理此包;例如,如果此条件为 false 或省略并且正在安装捆绑包,则 Burn 将安装此包。” -
谢谢菲尔塞尔默。删除 InstallCondition 确实有效。我将 Brian Sutherland 的答案标记为正确,因为他写的是答案。感谢您的回复。
标签: wix installation bundle