我有一箇舊的Windows服務在德爾福,現在必須在同一臺服務器上安裝多次,我試圖改變代碼,所以我能夠改變服務名稱因爲我正在安裝該服務,但我無法使其工作。德爾福相同服務的多個實例
我找到了一些關於它的信息here和一些here,並且在研究了這些帖子並進行了必要的修改之後,我能夠安裝具有不同名稱的兩個服務,但是服務並未啓動。
我發佈負責控制下面的服務的類(繼承TService),我知道是相當多的代碼,但我真的很感激任何幫助。
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
tvdAvalancheDataCenterService.Controller(CtrlCode);
end;
function TtvdAvalancheDataCenterService.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TtvdAvalancheDataCenterService.ServiceLoadInfo(Sender : TObject);
begin
Name := ParamStr(2);
DisplayName := ParamStr(3);
end;
procedure TtvdAvalancheDataCenterService.ServiceBeforeInstall(Sender: TService);
begin
ServiceLoadInfo(Self);
end;
procedure TtvdAvalancheDataCenterService.ServiceCreate(Sender: TObject);
begin
ServiceLoadInfo(Self);
end;
procedure TtvdAvalancheDataCenterService.ServiceStart(Sender: TService;
var Started: Boolean);
begin
FtvdTrayIcon := TtvdEnvoyTrayIcon.Create(Self);
SetServiceDescription;
FtvdDataCenter.tvdActive := true;
end;
procedure TtvdAvalancheDataCenterService.ServiceStop(Sender: TService;
var Stopped: Boolean);
begin
FreeAndNil(FtvdTrayIcon);
FtvdDataCenter.tvdActive := False;
end;
procedure TtvdAvalancheDataCenterService.ServiceAfterInstall(Sender: TService);
begin
SetServiceDescription;
end;
procedure TtvdAvalancheDataCenterService.SetServiceDescription;
var
aReg: TRegistry;
begin
if FDescriptionUpdated then
Exit;
aReg := TRegistry.Create(KEY_READ or KEY_WRITE);
try
aReg.RootKey := HKEY_LOCAL_MACHINE;
if aReg.OpenKey(cnRegKey+ Name, true) then
begin
aReg.WriteString('Description', cnServiceDescription);
aReg.CloseKey;
end;
FDescriptionUpdated:= True;
finally
aReg.Free;
end;
end;
我使用Delphi XE和服務需要運行在Windows服務。
在此先感謝
每個實例是否住在自己的道路? – whosrdaddy
是的每個實例都有它的路徑(相同的二進制名稱tho)例如「c:\ test1 \ test.exe」和「c:\ test2 \ test.exe」 – Icaro
嗨IcaroNZ,請查看我的答案 – whosrdaddy