2012-06-08 115 views
1

我正在使用c + +在VS2010中創建窗口服務,並且想知道是否有任何方法在特定時間後重新啓動服務,實際上我會讓用戶在INI文件和服務應該能夠在當時重新啓動。任何示例代碼或任何可用的API?如何在特定時間後重新啓動窗口服務

+0

是否有您希望定期重新啓動服務的特定原因?如果你有內存泄漏等問題,我建議你修改它們。 –

+0

@JoachimPileborg先生的礦山項目要求,我必須在用戶寫入INI文件後的時間重新啓動服務 – user1402643

+0

看到這個SO問題從服務本身重新啓動http://stackoverflow.com/questions/220382/how- can-a-windows-service-programmatically-restart-itself –

回答

1

添加scheduled task調用批處理文件,做

net stop servicename 
net start servicename 
+0

先生,我開始和停止從service.msc服務...是否有其他方式,我們可以通過其中的程序重新啓動... – user1402643

+0

@ user1402643看到超人的迴應,你也可以使用API​​。我建議的所有內容都可以通過API完成,但操作系統允許您以「編程方式」進行操作。 – kenny

+0

如果'net stop'以超時退出,並且服務狀態在「net start」啓動時仍處於「停止」狀態,則不會重新啓動服務。 – hvd

0

StartService API可以啓動Windows服務和ControlService API可以停止Windows服務。

+0

這真的可以用在這裏嗎?該服務已經運行,我認爲Windows會阻止它運行兩次。如果該服務自行停止,則無法再啓動該命令。 – Wolfgang

+1

您無法啓動另一個實例。但你可以先停下來然後開始。這些API將從外部程序使用,而不是來自服務本身。 – Superman

+0

服務從StartServiceCtrlDispatcher返回後可以調用它嗎?在這一點上,這個過程仍然存在,但從SCM的角度來看,該服務不再運行。我懶得去嘗試自己,但我很想知道結果。 – Luke

3

您可以使用加載並使用_execl執行新的子進程。

下面是說明如何我打開一個記事本++比如一個簡單的代碼:

#include <process.h> 

int main(){ 
    _execl("C:\\Program Files\\Notepad++\\Notepad++.exe", "\\0"); 
    return 0; 
} 

這樣你可以有另一個進程實際上將停止當前的進程,並重新開始你的過程。

相關問題