要求:乙個exe,如何將它做成這樣的效果:
1、雙擊它時,像乙個forms程式那樣正常顯示窗體執行。
2、註冊成系統服務,每次都可以從service.msc中啟動它。
也就是說,沒註冊之前,它可以當作普通forms程式執行,註冊之後,它就可以當系統服務執行。
做法:參考delphi 裡面scktsrvr的源**,program files/borland/delphi7/bin 搜尋scktsrvr 就會看到有個scktsrvr.dpr,檢視它的工程源程式,原理:在啟動程式時,通過啟動的方式來決定如何引導程式。
必須的地方使用紅色標記:
program rodblayer;
// remobjects: careful, do not remove!
uses
urocominit,
//增加引用
svcmgr, forms, sysutils, winsvc,
rodblayerservice in 'rodblayerservice.pas' ,
rodblayerservices_intf in 'rodblayerservices_intf.pas',
rodblayerservices_invk in 'rodblayerservices_invk.pas',
uadoconnectionpool in 'uadoconnectionpool.pas',
uconnectionpool in 'uconnectionpool.pas',
comm in 'comm.pas',
config in 'config.pas' ,
rodblayerservices_impl in 'rodblayerservices_impl.pas';
//步驟一、查詢是否通過命令列來註冊或註消 ,如是則表明是系統服務
functioninstalling: boolean;
begin
result := findcmdlineswitch('install',['-','/','/'], true) or
findcmdlineswitch('uninstall',['-','/','/'], true);
end;
//步驟二、檢測是否是系統服務中啟動服務;
function startservice:boolean;
var
mgr, svc: integer;
username, servicestartname: string;
config: pointer;
size: dword;
begin
result := false;
mgr := openscmanager(nil, nil, sc_manager_all_access);
if mgr <> 0 then
begin
//'rodbservices'代表服務名(services name),不是指服務顯示名(services display name)
//它根據你的服務而定。
svc := openservice(mgr, pchar('rodbservices'), service_all_access);
result := svc <> 0;
if result then
begin
queryserviceconfig(svc, nil, 0, size);
config := allocmem(size);
tryqueryserviceconfig(svc, config, size, size);
servicestartname := pqueryserviceconfig(config)^.lpservicestartname;
if comparetext(servicestartname, 'localsystem') = 0 then
servicestartname := 'system';
finally
dispose(config);
end;
closeservicehandle(svc);
end;
closeservicehandle(mgr);
end;
if result then
begin
size := 256;
setlength(username, size);
getusername(pchar(username), size);
setlength(username, strlen(pchar(username)));
result := comparetext(username, servicestartname) = 0;
end;
end;
//步驟
三、判斷
begin
if not installing then
begin
createmutex(nil, true, 'rodbservices'); //建立乙個互斥體;
程式任務系統定時啟動服務
每日一貼,今天的內容關鍵字為程式任務 有法方2中 1 1.cmd 2.at 8 32 everymonday,tuesday,wednesday,thursday,friday d program files tongda ispirit ispiritpro.exe 這樣就能夠在籌畫任務看到 2 ...
關於系統服務程式的編寫
什麼是服務?服務也是一種應用程式的型別,與普通程式不同的是,服務程式總是在後台默默執行,使用者察覺不到,並且開機時即立刻啟動,但在任務管理器中不存在對應的程序。如何檢視服務?那麼既然在任務管理器中不存在相應的程序,我們如何取消服務呢?在 我的電腦 上單擊右鍵,在選單中選擇 管理 服務和應用程式 服務...
為DataSnap系統服務程式新增描述
delphi2010中datasnap高階技術 1 為datasnap系統服務程式新增描述 收藏 這幾天一直在研究delphi 2010的datasnap,感覺功能真是很強大,現在足有理由證明delphi7該下崗了。現找到辦法新增描述 procedure tservercontainer2.serv...