Inno Setup尝试多次卸载Delphi TService

时间:2015-03-05 16:32:08

标签: delphi service inno-setup

我有一个使用Delphi 2010构建的Windows服务,我正在使用Inno Setup安装程序进行部署。

它主要是顺利运行 - 我在卸载和升级之前正确停止了服务,并在安装后重新启动它。

[Run]
Filename: {app}\MyService.exe; Parameters: "/INSTALL /SILENT"; ...

[UninstallRun]
Filename: {app}\MyService.exe; Parameters: "/UNINSTALL /SILENT"; ...`

但是,我还有一个问题:如果我连续两次运行安装程序,那么下次卸载时无法显示消息对话框:Service XXX failed to uninstall with error: "System Error. Code:1060. The specified service does no exist."

日志记录显示卸载程序运行时“UninstallRun”部分正在执行两次。第二次,它失败并抛出错误消息(来自TServiceApplication::RegisterServices),因为该服务已经被卸载。很确定这是因为Inno Setup在uninstall.dat跟踪多个安装的方式。

我解决这个问题的'hack'是使用TService的ServiceBeforeUninstall处理程序,如果没有安装服务,则使用exit(0)。这感觉就像一种蛮力的方法 - 有更聪明的方法来解决问题吗?

1 个答案:

答案 0 :(得分:1)

不要在TService中使用内置的SCM包装器函数,使用SCM API,它们将为您提供更多的服务管理控制。我多年前写了一个InnoSetup脚本,你可以找到它here - 有一段时间我没有更新它,但它仍然是一个起点。