如何在 TService 的 AfterInstall 裡面立刻啟動 Service? |
尚未結案
|
silence1975
一般會員 發表:1 回覆:1 積分:0 註冊:2006-08-14 發送簡訊給我 |
||||||||||||
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
||||||||||||
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
||||||||||||
silence1975
一般會員 發表:1 回覆:1 積分:0 註冊:2006-08-14 發送簡訊給我 |
.bat 的方式我會,
在站上也有找到一個範例: 有先進把 WinSvc 包裝寫成 unit --> ServiceManager 可以用來呼叫已知的 service 啟動或停止。 我目前的做法就是用一隻程式,用 ShellExecute 呼叫 " 服務.EXE -install "來安裝, 然後再用那些函式來 StartService 而我的原始問題是:在 install 後可不可以自體啟動 因為目前 install 後,除非立刻手動或程式呼叫來啟動 service,或是立刻重新開機 install 進去的 service 都是一直在未啟動的狀態 所以才會問:是不是有辦法可以寫在 AfterInstall 裡面 ===================引 用 sryang 文 章=================== 如果用一個 bat 檔來安裝你的服務呢? yourservice.exe /install net start "your service name" |
|||||||||||
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
procedure TEasyService.ServiceAfterInstall(Sender: TService);
var hSC, hServ : THandle; P : PChar; begin hSC := OpenSCManager(nil, nil, SC_MANAGER_CONNECT); if hSC > 0 then begin hServ := OpenService(hSC, PChar(Name), SERVICE_START); if hServ > 0 then begin P := nil; StartService(hServ, 0, P); CloseServiceHandle(hServ); end; CloseServiceHandle(hSC); end; end; 事實上,TService 類型設為自動,目的就是為了等待用戶端去Trigger它。 這樣做是有點奇怪的。 |
|||||||||||
shunchia63
高階會員 發表:26 回覆:141 積分:198 註冊:2007-05-22 發送簡訊給我 |
補充一下MSDN對ServiceStartMode說明 服務安裝程式使用 ServiceStartMode 來指示在系統啟動時新服務是否應該停用,系統是否在系統啟動時自動啟動服務,或是由使用者或應用程式手動地啟動服務。 ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref11/html/T_System_ServiceProcess_ServiceStartMode.htm
.NET 版的 下列範例會使用 ServiceController 類別來檢查 Alerter 服務是否已經停止,如果該服務已經停止,該範例會啟動該服務並等待至服務的狀態被設定成 // Check whether the Alerter service is started. ServiceController sc = new ServiceController(); sc.ServiceName = "Alerter"; Console.WriteLine("The Alerter service status is currently set to {0}", sc.Status.ToString()); if (sc.Status == ServiceControllerStatus.Stopped) { // Start the service if the current status is stopped. Console.WriteLine("Starting the Alerter service..."); try { // Start the service, and wait until its status is "Running". sc.Start(); sc.WaitForStatus(ServiceControllerStatus.Running); // Display the current service status. Console.WriteLine("The Alerter service status is now set to {0}.", sc.Status.ToString()); } catch (InvalidOperationException) { Console.WriteLine("Could not start the Alerter service."); } }
編輯記錄
shunchia63 重新編輯於 2008-03-25 23:57:19, 註解 無‧
shunchia63 重新編輯於 2008-03-26 00:05:58, 註解 無‧ shunchia63 重新編輯於 2008-03-26 00:07:31, 註解 無‧ shunchia63 重新編輯於 2008-03-26 00:08:14, 註解 無‧ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |