2016-06-27 4 views
0

이 사용자 지정 동작이 실패합니다. cmd /c blah blah & pauseWIX 사용자 지정 동작에서 경로를 해결하는 방법

<CustomAction Id="SetIntegrityLevel" Return="check" 
    Directory="TARGETDIR" Impersonate="no" Execute="deferred" 
    ExeCommand="cmd /c icacls UiProxy.exe /SetIntegrityLevel High &amp; pause" /> 

사업은 실패한 명령 줄 작업에 무슨 일이 있었는지에 대한 몇 가지 가시성을 얻기를위한 나의 작은 트릭입니다.

UiProxy.exe: The system cannot find the file specified. 
Successfully processed 0 files; Failed processing 1 files 
Press any key to continue . . . 

이것은 놀랍습니다. UiProxy.exe는 TARGETDIR에서 지정한 폴더에 있습니다.

INSTALLDIR 기호를 명령 문자열로 해석 할 수있는 방법이 있습니까? 나는 이런 것을 만들어야합니다.

icacls "C:\Program Files (x86)\UiProxy\UiProxy.exe" /SetIntegrityLevel High 

분명히 나는 ​​다음과 같이 명시 적으로 뭔가를 따옴표를 넣어해야합니다 :

<CustomAction Id="SetIntegrityLevel" Return="check" 
    Directory="TARGETDIR" Impersonate="no" Execute="deferred" 
    ExeCommand="icacls &quot;[INSTALLDIR]UiProxy.exe&quot; /SetIntegrityLevel High" /> 

어디했습니다 [INSTALLDIR] 내가 해결 기호를 필요로했습니다. 문제는이를 표현하는 방법입니다. 나중에 코드에서

답변

0

는 표준 보일러, 나는이 발견 있기 때문에 내가 게시되지 않은 :

<CustomAction Id="SetIntegrityLevel" Return="check" 
    Directory="TARGETDIR" Impersonate="no" Execute="deferred" 
    ExeCommand="cmd /c icacls &quot;[INSTALLFOLDER]UiProxy.exe&quot; /SetIntegrityLevel High &amp; pause" /> 

성공 메시지를 생성 같은 명령 줄을 지정

<Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLFOLDER" Name="UiProxy" /> 
     </Directory> 
    </Directory> 
    </Fragment> 

를, 그래서 사각형을 표시 대괄호 구문은 정확했지만 TARGETDIR은 잘못된 기호이므로 INSTALLFOLDER 여야합니다.

+0

일반적으로 설치된 파일의 위치를 ​​사용하려면 (설치자가 UIProxy.exe를 설치 했으므로) [# UIProxy.exe의 파일 ID]를 사용하여 구성 요소의 전체 경로를 지정할 수 있습니다. 이것은 일반적으로 단축키에서 사용됩니다. –

+0

나는 이것을 시도하고 당신이 옳다. 좀 더 유지 보수가 잘되는 이유는 그것을 왜 더 좋은 방법이라고 설명하는 답으로 제안하고 받아 들일 것입니다. –

+0

@PeterWone이 CustomAction을 실행할 순서를 제안 할 수 있습니까? 나는 InstallFiles (4000) 후에도 필요한 프로그램이 설치되지 않았다고 말합니다. – vijiboy

관련 문제