2016-12-21 18 views
1

[Code] 섹션 (AfterInstall 처리기)에서 특정 Windows 서비스를 시작하려고합니다. 시작할 수 없으면 설치를 롤백하고 싶습니다.[Code] 섹션에서 Inno Setup 설치를/VERYSILENT 모드에서 중단 하시겠습니까?

일반적으로 설치 프로그램을 UI에서 실행하면 WizardForm.Close()이 올바르게 작동합니다. 그러나 /verysilent 명령 줄 매개 변수를 사용하여 installer를 실행하면 WizardForm.Close이 무시되고 설치가 계속됩니다. 또한 Stackoverflow에 대한 다른 기사에서 제안한 Abort()을 시도했지만 다른 suppressiblemsgbox처럼 작동하며 설치를 중단하지 않습니다.

/verysilent 모드에서 설치를 조건부로 중단 할 수있는 방법이 있습니까?

+0

서비스를 시작 하시겠습니까? 어떤 이벤트 기능이 있습니까? –

+0

@mart'net start service_name'을 실행하기 위해 Exec()을 사용하고 있지만, 문제와는 아무 상관이 없습니다. –

+0

@MartinPrikryl : 오, 그리고 이벤트 함수를 위해서 : 나는'[Files]'섹션에서'AfterInstall'을 사용합니다. –

답변

0

프로그래밍 방식으로 롤백을 트리거하는 방법은 없습니다.

당신이 할 수있는 일은 강제로 ExitProcess WinAPI function을 사용하여 설치를 중단하는 것입니다.

procedure ExitProcess(exitCode:integer); 
    external '[email protected] stdcall'; 

크레딧 : https://stackoverflow.com/a/7022353/850848


청소기 솔루션은 파일을 설치하고 CurStepChanged(ssInstall)의 시작 부분에 프로그래밍 Windows 서비스를 시작하는 것입니다. 그리고 뭔가 잘못되면 설치를 중단하기 위해 Abort function을 사용하십시오. 이 문맥에서는 Abort가 작동합니다. function documentation을 참조하십시오.

+0

불행히도 설치 프로그램이 서비스 DLL을 먼저 설치하고 서비스를 사용하여 다음에 설치되는 파일을 게시하기 때문에 Abort()를 사용할 수 없습니다. 하지만 ExitProcess()는 매력처럼 작동합니다. 감사! –

0

WizardForm.Show(); // verysilent로도 보여 주도록 강요하십시오

+0

이 질문에 어떻게 대답합니까? –