線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3089
推到 Plurk!
推到 Facebook!

如何在 TService 的 AfterInstall 裡面立刻啟動 Service?

尚未結案
silence1975
一般會員


發表:1
回覆:1
積分:0
註冊:2006-08-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-03-19 15:29:55 IP:218.210.xxx.xxx 訂閱
請問如何在 AfterInstall 裡面,讓 service 自動啟動?或是有其他方法,在 install 就立刻啟動?
因為通常做 service.exe /install 後,
service manager 裡面看到的還是未啟動的狀態,要待重開機才會自動啟動。

嘗試過在 AfterInstall 裡面呼叫 ServiceExecute / ServiceStart 都失敗
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-03-19 18:00:48 IP:59.125.xxx.xxx 訂閱
如果用一個 bat 檔來安裝你的服務呢?
yourservice.exe /install
net start "your service name"
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-03-20 00:03:35 IP:61.67.xxx.xxx 未訂閱
抱歉, 回覆此篇不是解決問題, 因為我也遇到這個問題, 查了很多文獻找不到解決方式
silence1975
一般會員


發表:1
回覆:1
積分:0
註冊:2006-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-03-24 16:10:15 IP:220.228.xxx.xxx 訂閱
.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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-03-25 23:00:25 IP:61.222.xxx.xxx 訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-03-25 23:39:17 IP:61.64.xxx.xxx 訂閱
 

補充一下MSDN對ServiceStartMode說明
服務安裝程式使用 ServiceStartMode
來指示在系統啟動時新服務是否應該停用,系統是否在系統啟動時自動啟動服務,或是由使用者或應用程式手動地啟動服務。
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref11/html/T_System_ServiceProcess_ServiceStartMode.htm

說明
Automatic指示服務在系統啟動時由作業系統啟動 (或是已啟動)。如果自動啟動服務依賴手動啟動服務,則手動啟動服務也會自動在系統啟動時啟動。
Disabled指示服務已停用,所以不能由使用者或應用程式來啟動。
Manual指示服務只能由使用者 (使用服務控制管理員) 手動或由應用程式啟動。


.NET 版的
下列範例會使用 ServiceController 類別來檢查 Alerter 服務是否已經停止,如果該服務已經停止,該範例會啟動該服務並等待至服務的狀態被設定成 Running 為止。



// 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, 註解 無‧
系統時間:2024-05-05 13:20:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!