2016-12-21 48 views
1

我试图从[Code]部分(在AfterInstall处理程序中)启动某个Windows服务。当它启动失败时,我想回滚安装。如何从[Code]部分以/ VERYSILENT模式中止Inno Setup安装?

通常,当从UI运行安装程序时,WizardForm.Close()可以正确执行作业。但是当安装程序使用/verysilent命令行参数执行时,WizardForm.Close似乎被忽略并且安装继续。 我也尝试Abort(),由Stack Overflow的其他文章建议,但它的工作原理与其他任何suppressiblemsgbox一样,并且不会中断安装。

有没有什么办法可以有条件地中止安装在/verysilent模式下?

+0

您是如何开始服务的?什么事件功能? –

+0

@mart我使用Exec()来运行'net start service_name',但它与问题无关。 –

+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

不幸的是,我不能使用Abort(),因为安装程序首先安装服务DLL,然后使用该服务发布文件,然后安装它。但是ExitProcess()就像一个魅力。谢谢! –

0

WizardForm.Show(); //使用verysilent强制显示

+0

这是如何回答这个问题的? –