2014-07-08 4 views
0

사용자 설치 관리자는 CustomAction (InstallExecuteSequence에서 호출 됨)을 사용하여 선택적으로 설치 프로그램 옆의 디렉토리에서 사용자 구성 파일을 복사합니다. [SourceDir]을 사용하여 소스 디렉토리를 찾습니다.WiX MSI의 [SourceDir]을 사용하여 번 호가있는

현재 별도의 .MSI 파일로 배포되는 32 비트 및 64 비트 버전이 있습니다. Burn을 사용하여 이러한 .MSI 파일을 포함하는 단일 .EXE를 작성하려고합니다. 분명히 MSI가 Burn에 의해 설치 될 때,이 사용자 지정 작업이 작동하지 않기 때문에 [SourceDir]이 다른 곳 (C:\ProgramData\Package Cache\... 경로를보고 있습니다)에 있습니다.

나는 WixBundleOriginalSource 변수를 찾았지만, 내 문제는 MSI 파일을 별도로 작동시키고 Burn으로 패키지화하기를 원합니다. WixBundleOriginalSource가 정의되어 있지 않은 경우 (Burn .exe로 설치하는 사용자) 또는 WixBundleOriginalSource가 정의되지 않은 경우 SourceDir (사용자가 직접 .MSI를 설치하는 사용자)에 조건부로 변수를 설정 한 다음이 변수를 내 사용자 지정 동작에 전달해야한다고 생각합니다. (나는 WixOriginalSource가 인스톨러의 전체 경로이며 그것이 위치한 디렉토리가 아니라는 것을 알고있다.)

이게 가능한가? 그렇다면 구문을 사용하여 도와주십시오.

업데이트 :

나는 잠재적으로 내 사용자 지정 작업에 조건 부분을 처리하고 두 번 호출 할 수 있습니다 내가 뭘로, 한 번 [SourceDir]로 (MSI를 직접 사용하는 경우 작동하는) 지금 :

,756을 내 제품

<CustomAction Id='CopyConfigFiles' 
        FileKey="MyInstallationUtility" 
        ExeCommand="COPYFILES [SourceDir]" 
        Execute="deferred" 
        Impersonate="no" 
        Return="ignore" /> 

...에 한 번. 그러나, 나에게 사용자 정의 작업을 WixBundleOriginalSource 얻을 수있는 방법을 찾을 수 없습니다. 사용 :

    ExeCommand="COPYFILES [WixBundleOriginalSource]" 

... 작동하지 않습니다. 사용 :

을 내 굽기 번들

<WixVariable Id="ConfigFileLocation" Value="[WixBundleOriginalSource]" /> 

에서 내 제품

    ExeCommand="COPYFILES [ConfigFileLocation]" 

에 ... 또한 작동하지 않습니다. 둘 다 매개 변수로 빈 문자열을 제공합니다.

+0

이 질문에 대한 대답은 내 마지막 질문에 대한 답변으로 보입니다. http://stackoverflow.com/questions/17729878/passing-command-line-args-to-msi-from-wix-bundle –

답변

6

해결 방법은 화상으로 덮어 쓸 수있는 MSI 스크립트에서 속성을 정의하고 화상이 설정하지 않으면 MSI 스크립트에서 [SourceDir]로 설정하는 것입니다.

<Property Id='CONFIGFILELOCATION' Value='unset' /> 
    <CustomAction Id='MsiConfigLoc' Property='CONFIGFILELOCATION' Value='[SourceDir]' Execute='immediate' /> 

필요가있는 사용자 지정 작업을 : 우리는 속성을 정의하는 MSI 스크립트에서

와 [SOURCEDIR]로 설정하는 사용자 지정 작업 (우리가 나중에 테스트 이는 '해제'로 초기화하는)

: - CONFIGFILELOCATION가 화상 EXE가 설정되지 않은 경우에만

<CustomAction Id='CopyConfigFiles' 
       FileKey="MyInstallationUtility" 
       ExeCommand="COPYFILES [CONFIGFILELOCATION]" 
       Execute="deferred" 
       Impersonate="no" 
       Return="ignore" /> 

다음 조건 (CopyConfigFiles 전) 새로운 사용자 지정 작업을 호출 확장입니다 InstallExecuteSequence에서 : 설치 프로그램의 위치는이 새 속성을 사용하도록 업데이트됩니다

 <Custom Action='MsiConfigLoc' Before='CopyConfigFiles'>CONFIGFILELOCATION="unset"</Custom> 
     <Custom Action='CopyConfigFiles' Before='InstallFinalize'/> 

마지막으로 굽기 번들에 우리는 [WixBundleOriginalSource]로 CONFIGFILELOCATION 속성을 설정 :

 <MsiPackage SourceFile='ProductSetup.msi' DisplayInternalUI='yes'> 
      <MsiProperty Name='CONFIGFILELOCATION' Value='[WixBundleOriginalSource]' /> 
     </MsiPackage> 

윅스이 설치 실행 파일이있는 디렉토리를 제공대로 [WixBundleOriginalSourceFolder]를 사용하는 것이 좋을 것이다 3.9에서 여기서는 [WixBundleOriginalSource] (설치 프로그램 실행 파일의 전체 경로)을 사용하고 사용자 정의 설치 코드에서 파일 이름을 제거하는 방법을 사용하고 있습니다.