2017-10-19 151 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}";