필자의 좌절감이 10에 가까워지고 있습니다. 저는 몇 주 동안 wix 설치 프로그램을 작업 해 왔습니다. 이 설치 프로그램은 Google 소프트웨어의 전제 조건을 설치합니다. 비주얼 스튜디오가 없기 때문에 배치 파일을 만들어서 (명령 행 읽기 만) wix 프로젝트를 만들었습니다. 이 번들에는 .msi, .msu 및 .exe 파일을 포함하는 약 9 가지 선행 조건이 있습니다.Wix ExePackage는 설치시 DetectCondition, InstallCondition과 상관없이 항상 설치됩니다.
제 질문은 체인 요소에 설명 된 ExePackage와 관련이 있습니다. DetectCondition, InstallCondition, Install 및 Unistall과 상관없이 여러 개의 ExePackages가 항상 설치됩니다. 로그 파일에는 DetectCondition = true 및 InstallCondition = false가 표시되지만 ExePackages는 여전히 실행 및 설치됩니다. 마다. 시각.
나는 지난 2 주간의 좌절감에서 어딘가에 ExePackages가 설치 프로그램에서 .msi 파일과 동일한 가시성을 허용하지 않으며 그 때문에 내가 다루고있는 것과 정확히 같은 문제를 일으킬 수 있다고 읽었습니다. exePackage가 실행되고 실제 .exe 파일에 적절한 내부 플래그가없는 경우이를 제거하는 대신 설치하는 방법을 언급하는 사람을 기억하는 것 같습니다. 그러나 내가 올바르게 기억하면 그 질문에 대한 답변이 좋았지 만, 특정 조건에서 ExePackage의 실행을 완전히 막을 수있는 것을 찾을 수 없었습니다.
편집 1 : WiX 버전 3.7을 사용하고 있습니다.
나는 이것을 수행하는 방법에 대한 단서를 제공하는 예제 또는 라이프 라인을 원합니다. 여기에 문제 ExePacakge의 예 : 당신의 도움이 사전에
[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
감사 :
...
<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>
...
그리고 여기에 로그 파일에서 '크롬'의 모든 인스턴스입니다.
'InstallCondition'의 경우 : 조건이 false로 평가되고 번들이 설치, 복구 또는 수정되는 경우 패키지가 제거됩니다. 즉, 패키지를 제거하려고 시도해야하지만 제거 명령은 제공되지 않습니다. 상상한다는 것은 설치 프로그램이 무시하는 몇 가지 매개 변수를 사용하여 번들이 설치 프로그램을 실행하고 있음을 의미합니다. 'ChromeStandaloneSetup64-v51.0.2704.103.exe' (제거 할 수있는 경우)를 제거하는 데 필요한 매개 변수와 함께 'UninstallCommand'를 추가하십시오. – philselmer
사실,'DetectCondition'이 false (또는 생략 됨)로 평가되면 번들이 패키지를 설치하기 때문에 실제로 InstallCondition 만 제거 할 수 있다고 생각합니다. "Burn은이 조건을 사용하여 번들 동작 중에이 패키지를 처리하는 방법을 결정합니다 (예 :이 조건이 false이거나 생략되고 번들이 설치되는 경우 Burn은이 패키지를 설치합니다). – philselmer
고맙습니다. InstallCondition을 제거해도 작동했습니다. 그가 쓴 이후 Brian Sutherland의 답은 정확하다고 표시했습니다. 응답 해 주셔서 감사합니다. – Scottlysan