2010-04-21 4 views
1

은 내가 다음을 통해 수행 배치 파일을 실행하려면 :Wix - 배치 파일을 실행할 디렉토리를 어떻게 지정합니까?

<CustomAction Id='InstallFilter' FileKey='install' ExeCommand='' Execute='deferred' /> 

<InstallExecuteSequence> 
    <Custom Action='InstallFilter' Before='InstallFinalize' /> 
</InstallExecuteSequence> 

이 배치 파일을 실행됩니다,하지만 C에서 실행 : \ WINDOWS \ SYSTEM32 (또는 같은). 파일이있는 디렉토리에서 실행하려고합니다. FileKey 속성을 사용하여 Directory 속성을 지정하게됩니다. 설치 프로그램이 특정 디렉토리 (가급적이면 디렉토리 ID)를 모두 소모하게하려면 어떻게해야합니까?

또한 스크립트를 사용하여 응용 프로그램을 제거하려고하면 "Windows Installer 패키지에 문제가 있습니다. 설치를 완료하는 데 필요한 프로그램을 실행할 수 없습니다."라는 오류 메시지가 나타납니다. 이는 스크립트가 실행될 때 파일이 제거 된 것처럼 의미가 있습니다. 문제는 다음과 같습니다.

  1. 내 액션을 제거 할 때 설치에만 실행하도록 지정하려면 어떻게합니까?

  2. 어떻게 현재 복사본을 제거합니까?

답변

1

설치 관리자가 상승 모드의 TrustedInstaller 사용자 (관리자)로 실행되고 있습니다. 기본적으로 승격시 cmd.exe 작업 폴더는 C:\Windows\System32입니다. 상승 된 작업 폴더를 강제로 다른 주소로 변경하는 방법은 없습니다 (또는 적어도 하나는 알지 못합니다). cmd.exe. (임의의 폴더에서 cmd -c some.cmd 상승 실행의 보안 문제를 고려)

가에 위치하고있는 폴더를 가지고 이런 식으로 현재 폴더를 변경할 수 있습니다

당신 스크립트 :

setlocal 
pushd %~dp0 

rem ... script logic ... 

popd 
endlocal 

당신은 다른 조건을 찾아 볼 수 있습니다 @Cheeso에서 사용자 지정 작업을 실행해야 할 때를 지정하여 자신의 질문 how to run custom action on uninstall only에 응답 할 수 있습니다. 당신이 특정 시나리오에 대해 작동하지 않습니다NOT INSTALLED 경우, NOT REMOVE을 시도 :

업데이트 (불필요 정보를 복제하지 마십시오).

+0

푸시 제안은 훌륭했습니다. 고맙습니다. 하지만 설치시에만 실행할 수는 없습니다. 전송 한 게시물을 기반으로 사용자 지정 작업의 값으로 Not Installed를 추가했지만 제거시에는 여전히 실행되고 실패합니다. 어떤 제안? –

+0

흠 .. 어쩌면 내가 잘못 본 것 같아. 나는 그것을 한 번 더 시험해 보았다. 그리고 "NOT Installed"가 효과가있는 것처럼 보인다. 대소 문자를 구별하지 않습니까? 어쨌든, 모든게 잘되고있어, 고마워. –

관련 문제