论坛风格切换切换到宽版
  • 3616阅读
  • 4回复

老虎版主,再请教一下这个怎么写? [复制链接]

上一主题 下一主题
离线546242502
 

发帖
332
金钱
-3060
威望
-306
只看楼主 倒序阅读 0 发表于: 2015-08-30

前面帖子的一个系统服务脚本:
//这是重点
//根据需要修改服务名称 "myservice",以及服务程序 'c:\winnt\system32\myservice.exe';
function NextButtonClick(CurPageID: Integer): Boolean;
begin
  case CurPageID of
    wpReady:       //安装开始前才开始添加
      begin
      if IsServiceInstalled('myservice') = false then
      begin
      if InstallService('c:\winnt\system32\myservice.exe','myservice','my service','my service is doing usefull things',SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START) = true then
      begin
       StartService('myservice');
       StopService('myservice');
       // after stopping a service you should wait some seconds before removing
       RemoveService('myservice');
       // otherwise removing can fail
      end
      end
      else if IsServiceRunning('myservice') then
       begin
       MsgBox('myservice is running',mbInformation, MB_OK);
       end;
      end;
  end;
  Result := True;
end;

最近有找到一个脚本,它的系统服务安装函数内容是:

function InstallService(FileName, ServiceName, DisplayName, Description : string;ServiceType,StartType :cardinal;szDepends:string) : boolean;
var
    hSCM    : HANDLE;
    hService: HANDLE;
begin
    hSCM := OpenServiceManager();
    Result := false;
    if hSCM <> 0 then begin
        hService := CreateService(hSCM,ServiceName,DisplayName,SERVICE_ALL_ACCESS,ServiceType,StartType,SERVICE_ERROR_NORMAL,FileName,'',0,szDepends,'','');
        if hService <> 0 then begin
            Result := true;
            // Win2K & WinXP supports aditional description text for services
            if Description<> '' then
                RegWriteStringValue(HKLM,'System\CurrentControlSet\Services\' + ServiceName,'Description',Description);
            CloseServiceHandle(hService)
        end;
        CloseServiceHandle(hSCM)
    end
end;

请问老虎版主,如果要使用,上面该怎么修改?
附件: 系统服务配置.zip (5 K) 下载次数:1
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2015-08-31
实质上代码是完全一样的,都是调用同一个 API 函数。这里不存在哪个代码更好的问题,如果你没有完全吃透代码,建议你不要把两个代拼起来使用。

如果你一定要用后面找到的这个 InstallService 函数代码,那么调用它的时候就要相应地传递参数,比如:
if InstallService('c:\winnt\system32\myservice.exe','myservice','my service','my service is doing usefull things',SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,'') = true then
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 2 发表于: 2015-08-31
回 1楼(gnatix) 的帖子
老虎版主,我尝试这么修改过,但是报错,也不知道怎么修正了:

离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 3 发表于: 2015-08-31
你出错的那个地方是
StartService('myservice');
正确应该是
SartService('myservice');
这个你仔细看一下你后来找到的那个代码就知道了,那个自定义的函数名就是 SartService
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 4 发表于: 2015-08-31
回 3楼(gnatix) 的帖子
gnatix:你出错的那个地方是StartService('myservice');正确应该是SartService('myservice');这个你仔细看一下你后来找到的那个代码就知道了,那个自定义的函数名就是 SartService。....... (2015-08-31 18:12) 

谢谢老虎版主提醒,一直没找到问题出在哪儿