2013-05-13 119 views
5

我有兩個二進制文件,必須爲它們創建一個服務。我嘗試了一個解決方案,使用「sc create」from How to install a Windows service with Inno Setup?Inno Setup:使用「sc create」安裝Windows服務

但它沒有爲我工作。它在安裝結束時陷入困境。我究竟做錯了什麼?

這裏是我的代碼:

Filename: {cmd}; Parameters: "sc create srvname start= auto DisplayName= mysrv binPath= {app}\mybinary.exe" ; Flags: runhidden 

我嘗試使用cmd代替{cmd} - 沒有變化。

我沒有嘗試我提到的解決方案中的Pascal代碼。我把它作爲最後的手段。

+1

可能的重複[如何安裝Windows服務與Inno安裝?](http://stackoverflow.com/questions/15204587/how-to-install-a-windows-service-with-inno -setup) – TLama 2013-05-13 08:54:40

+1

所以你的意思是告訴我必須使用你提到的解決方案中存在的pascal代碼。 – rakesh 2013-05-13 09:32:06

+2

不是你必須的,只是你應該。 – TLama 2013-05-13 09:40:29

回答

15

我用這個代碼和我的兩個服務都安裝和卸載:

[run] 
Filename: {sys}\sc.exe; Parameters: "create mysrv start= auto binPath= ""{app}\mysrv.exe""" ; Flags: runhidden 

[UninstallRun] 
Filename: {sys}\sc.exe; Parameters: "stop mysrv" ; Flags: runhidden 
Filename: {sys}\sc.exe; Parameters: "delete mysrv" ; Flags: runhidden 

這解決了我的問題,所以我爲什麼要在這種情況下使用帕斯卡爾?

+6

*爲什麼我應該在這種情況下使用Pascal?*因爲如果腳本出現問題,您無法處理或作出反應?我知道你現在不在乎,但不久後你會。如果您告訴用戶安裝成功,並且他們運行的應用程序期望服務運行應用程序失敗,您的用戶可能會感到驚訝,因爲服務將實際停止,但您不會注意到失敗的嘗試服務在安裝程序中啓動。 – TLama 2013-05-13 17:37:49

+1

這是一個很好的觀點。我會記住這一點。謝謝 – rakesh 2013-05-14 09:25:11

8

是否有任何理由試圖通過{cmd}運行它?

要麼添加/C參數,並根據需要引用其餘參數,或者僅使用所需參數運行sc.exe

[Run] 
Filename: "sc.exe"; Parameters: "create srvname start= auto DisplayName= mysrv binPath= {app}\mybinary.exe" ; Flags: runhidden 

注意,安裝服務的正確方法是在this answer提到的API,可以讓你檢測和處理錯誤。

1

爲什麼不僅

[運行] 文件名:{SYS} \ SC.EXE;參數:/安裝

+3

因爲沒有'/ install'參數。至少在不知道服務文件名的情況下,該工具將會丟失該做什麼。 – TLama 2014-12-30 10:23:47

+1

這也重複了7個月前給出的答案。 – Deanna 2015-04-08 11:22:18