我的沮喪程度接近10.我一直在使用wix安裝程序數週。該安裝程序會爲我們的軟件安裝先決條件。我沒有Visual Studio,所以我創建了一個批處理文件來構建(只讀命令行)wix項目。該軟件包中包含約9個先決條件,其中包括.msi,.msu和.exe文件。永久安裝Wix ExePackage無論在檢測條件,安裝條件,安裝或卸載時都會安裝
我的問題特別涉及鏈元素中描述的ExePackage。似乎有幾個(但不是全部)ExePackage總是安裝,無論是在安裝時還是在Unistall上的DetectCondition,InstallCondition。日誌文件顯示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>
...
這裏是從日誌文件中「鉻」的所有實例:
[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':如果條件計算結果爲false並且正在安裝,修復或修改軟件包,則軟件包將被卸載。這意味着它應該試圖卸載軟件包,但沒有提供卸載命令。我想這意味着bundle正在執行安裝程序,其中有一些安裝程序忽略的參數。嘗試添加一個'UninstallCommand',其中包括刪除ChromeStandaloneSetup64-v51.0.2704.103.exe所需的任何參數(如果甚至可能的話)。 – philselmer
實際上,我認爲你可以直接移除'InstallCondition',因爲如果'DetectCondition'評估爲false(或者被忽略),這個包只會安裝包。 「Burn使用此條件來確定如何在捆綁操作期間處理此包;例如,如果此條件爲false或未安裝,並且正在安裝捆綁包,則Burn將安裝此包。」 – philselmer
謝謝philselmer。刪除InstallCondition的確奏效。我寫了Brian Sutherland的回答是正確的,因爲他寫的是一個答案。感謝您的迴應。 – Scottlysan