2017-10-19 137 views
1

我希望能够使用installutil.exe安装Windows服务,然后从innosetup脚本自动运行并停止/删除T.myService.exe。我尝试下面的代码innosetup - 无法运行和/或停止/删除Windows服务

[Run] 
Filename: "{dotnet40}\InstallUtil.exe"; WorkingDir: "{app}"; Parameters: "T.myService.exe" ; Flags: runhidden 


[UninstallRun] 
Filename: "{dotnet40}\InstallUtil.exe"; Parameters: "stop T.myService.exe" ; Flags: runhidden 
Filename: "{dotnet40}\InstallUtil.exe"; Parameters: "delete T.myService.exe" ; Flags: runhidden 

以上只是表明我T.myService.exe在任务管理器/ SERVICES.MSC但状态为“已停止”。他们似乎没有自动运行。我将在任务管理器上T.myService.exe手动点击鼠标右键,使其运行或在命令提示符下面的命令

To install a service 
<path>\InstallUtil.exe <path to T.myService.exe> 

To uninstall a service 
<path>\InstallUtil.exe /u <path to T.myService.exe> 

但是,我希望服务启动,一旦安装完成自动运行当我卸载T.myService.exe的所有痕迹都应该消失。用我的innosetup代码,它不会自动运行和停止/删除。 我还启用了[UninstallDelete]删除我的T.myService.exe显式删除所有相关的文件从应用程序目录,但该服务仍然出现在任务管理器/ services.msc这是一个问题。

我缺少什么?我应该怎么做才能自动运行和停止/删除服务?

+0

因此,当从Inno Setup执行时,“InstallUtil.exe”不会显示任何问题,解释为什么它无法启动服务? –

+0

另外它似乎并没有['InstallUtil'](https://docs.microsoft.com/zh-cn/dotnet/framework/tools/installutil-exe-installer-tool)具有“stop”和“delete”关键字。 –

+0

当您从命令提示符运行'InstallUtil.exe'时 - 即使Inno Setup未提前安装服务(但未启动),它是否也能正常工作? +您是否使用提升的命令提示符进行安装? –

回答

0
  1. 将“srvman.exe”与您的应用程序一起部署到应用程序目录。
    SRVMANhttp://tools.sysprogs.org/srvman/

  2. 在innosetup脚本添加卸载动作

    [UninstallRun] 
    Filename: "{app}\srvman.exe"; Parameters: "delete YOUR_SERVICE_NAME"; 
    
0

相反InstallUtil的,使用SC:

[Run] 
Filename: "{app}\T.myService.exe"; Parameters: "-service"; StatusMsg: "Creating services" 
Filename: "{sys}\sc.exe"; Parameters: "create ""myServiceName"" start= auto binPath= ""{app}\T.myService.exe"""; Flags: runhidden; StatusMsg: "Creating services" 

[UninstallRun] 
Filename: "{sys}\sc.exe"; Parameters: "stop ""myServiceName"""; Flags: runhidden; StatusMsg: "Stopping services" 
Filename: "{sys}\sc.exe"; Parameters: "delete ""myServiceName"""; Flags: runhidden; StatusMsg: "Deleting services" 

不要忘记复制T. myService.exe导入{app}目录:

[Files] 
Source: "T.myService.exe"; DestDir: "{app}";