2011-10-20 76 views
23

我想使用Inno Setup在[Icons]部分使用命令提示符重新啓動Windows服務。請幫我解決問題。如何使用命令提示符重新啓動服務?

+0

我不是給[回答這個(http://stackoverflow.com/questions/7803337/how-to-run-windows-start-service-using -inno-setup/7804288#7804288)上次詢問時的評論? 使用小包裝EXE來提供清單以提供所需的權限並啓動/重新啓動服務。 – Deanna

+0

這個問題是無題的,因爲它問'如何在命令提示符下重新啓動服務',而不是特定於innosetup。 – cybermonkey

回答

31

您可以使用sc start [service]開始服務,並使用sc stop [service]來停止它。有些服務net start [service]正在做同樣的事情。

但是,如果您想在同一批次中使用它,請注意sc stop不會等待服務停止。在這種情況下,您必須使用net stop [service],然後使用net start [service]。這將同步執行。

+0

使用sc start + sc stop對我無效(起始部分不起作用)。但是使用net stop + net start確實有效! –

+1

您是否嘗試過爲服務名稱使用引號? – senyor

+3

'sc'有問題,它不會等待開始/停止完成,它只向服務發送開始/停止請求 - 所以你不能'停止Foo && sc開始Foo',因爲它失敗 - 它會在完成停止之前嘗試啓動服務。 'net'是在這裏使用的正確的,因爲它等待開始/停止完成。 –

1

您可以使用SC命令啓動和停止並查詢服務。至於innosetup我不確定。

22

您可以創建一個.BAT文件與以下內容:

net stop "my service name" 
net start "my service name" 
5
net.exe stop "servicename" && net.exe start "servicename" 
+1

是否有任何單個cmd重新啓動服務? – Nithin

+0

不是我所知道的 – oluies

+0

你可以做一個腳本,其中包含 net.exe stop%1 && net.exe start%1 – oluies

4

要重新啓動正在運行的服務:

net stop "service name" && net start "service name" 

但是,如果你不知道,如果服務首先運行並希望重新啓動或啓動它,請使用:

net stop "service name" & net start "service name" 

這適用於服務已經運行或沒有運行。

作爲參考,這裏是關於條件處理符號的documentation

+0

帶'||'的第二個版本非常不正確 - 如果服務正在運行,它將被停止,命令成功並且第二個命令根本不會被執行。嘗試'回聲||回聲b' –

+0

很好,我的壞。現在修復它! –

2

這是我的代碼,使用SC命令啓動/停止Windows服務。如果服務無法啓動/停止,它將打印日誌信息。你可以試試Inno Setup。

{ start a service } 
Exec(ExpandConstant('{cmd}'), '/C sc start ServiceName', '', 
    SW_HIDE, ewWaitUntilTerminated, ResultCode); 
Log('sc start ServiceName:'+SysErrorMessage(ResultCode)); 
{ stop a service } 
Exec(ExpandConstant('{cmd}'), '/C sc stop ServiceName', '', 
    SW_HIDE, ewWaitUntilTerminated, ResultCode); 
Log('sc stop ServiceName:'+SysErrorMessage(ResultCode));