2014-12-16 2 views
2

내 MSI 패키지가 InstallLocation 값을 HKEY_LOCAL_MACHINE\SOFTWARE\\(Wow6432Node)\Microsoft\Windows\CurrentVersion\Uninstall\\(GUID)에 쓰고 싶습니다. 프로그램 추가/제거 제어판 (Location 열)에서도이 값을 확인해야합니다.WiX 및 ARPINSTALLLOCATION

WiX를 통해이 값을 설정하려면 ARPINSTALLLOCATION 속성을 사용자 지정 동작으로 설정해야합니다. 나는 <Product>을 최소한으로 줄였습니다. 다음과 같이 표시됩니다.

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
    <Product Id="*" 
      Name="MyApplication" 
      Language="1033" 
      Version="!(bind.FileVersion.MyApplication.exe)" 
      Manufacturer="Me" 
      UpgradeCode="db37f5dc-68c5-46ee-bbdf-704ff68b70db"> 
    <Package InstallerVersion="400" Compressed="yes" InstallScope="perMachine" Languages="0" /> 
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 

    <!-- use SetProperty as suggested by Rolo --> 
    <SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLDIR]" After="CostFinalize" /> 
    <Feature Id="ProductFeature" Title="MyApplication" Level="1"> 
     <ComponentGroupRef Id="MyApplication.Files.AllRequired" /> 
    </Feature> 
    </Product> 
    <Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLDIR" Name="MyApplication" /> 
     </Directory> 
    </Directory> 
    </Fragment> 
    <Fragment> 
    <ComponentGroup Id="MyApplication.Files.AllRequired"> 
     <Component Id="ProductComponent" 
       Guid="90EA8F1C-77D2-40E1-81AD-44B076EFAB9D" 
       Directory="INSTALLDIR"> 
     <File Id="MyApplication.exe" Source="$(var.MyApplication.TargetDir)\MyApplication.exe" /> 
     </Component> 
    </ComponentGroup> 
    </Fragment> 
</Wix> 

MSI는 WiX 표준 부트 스트 래퍼에 번들로 제공됩니다.

+0

명백한 의견 만이 사용자별로 설치 (HKCU 참조) 또는 그것의 경우 64 비트 설치의 경우는 없을 것입니다

는이 같은 사용하여 뭔가를 단순화 할 수 있습니다. – PhilDW

+0

패키지에는 _InstallScope = "perMachine"_이 있으므로 HKLM \ Software \ ... (또는 Wow6432Node)에 있어야합니다. 어떤 경우에는 프로그램 제어판의 프로그램 추가/제거 란에 _Location_ – Johannes

+0

이 표시되어야합니다. 위의 코드를 완전하게 (그러나 줄였습니다.) '' – Johannes

답변

5

두 작업 (InstallExecuteSequence 및 InstallUISequence)에서 사용자 지정 작업을 실행하고 CostFinalize 후에 시퀀스를 실행해야합니다. 어쩌면

<SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLDIR]" After="CostFinalize" /> 
+0

시도했지만 도움이되지 않습니다. – Johannes

+0

@Johannes 설치 관리자 로그의 관련 부분을 제공해 주실 수 있습니까? – Rolo

+0

작업 시작 09:15:07 : CostFinalize. MSI (0C : 6C) [09 : 15 : 07 : 660] : 작업 : SetARPINSTALLLOCATION MSI (0C : 6C) [09 : 15 : 07 : 660] : 참고 : 1 : 2205 2 : 3 : ActionText 액션 종료 09:15:07 : CostFinalize. 반환 값 1 MSI (0C : 6C) [09 : 15 : 07 : 662] : 속성 변경 : ARPINSTALLLOCATION 속성을 추가합니다. 그 값은 'C : \ Program Files (x86) \ MyApp \'입니다. 작업 시작 09:15:07 : SetARPINSTALLLOCATION. MSI (0C : 6C) [09 : 15 : 07 : 663] : 조치 : MigrateFeatureStates MSI (0C : 6C) [09 : 15 : 07 : 663] : 참고 : 1 : 2205 2 : 3 : ActionText 작업이 종료되었습니다 09:15:07 : SetARPINSTALLLOCATION. Return value 1.' – Johannes