zoukankan      html  css  js  c++  java
  • Delphi服务程序注册与卸载

    Delphi服务程序注册与卸载

    uses winsvc;
    function InstallService(ServiceName, DisplayName, FileName: string): boolean;
    var
    SCManager,Service: THandle;
    Args: pchar;
    begin
    Result := False;
    SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
    if SCManager = 0 then Exit;
    try
       Service := CreateService(SCManager, //句柄
                       PChar(ServiceName), //服务名称
                       PChar(DisplayName), //显示服务名
                       SERVICE_ALL_ACCESS, //服务访问类型
                       SERVICE_WIN32_OWN_PROCESS, //服务类型 or SERVICE_INTERACTIVE_PROCESS
                       SERVICE_AUTO_START, //自动启动服务
                       SERVICE_ERROR_IGNORE, //忽略错误
                       PChar(FileName), //启动的文件名
                       nil, //name of load ordering group (载入组名) 'LocalSystem'
                       nil, //标签标识符
                       nil, //相关性数组名
                       nil, //帐户(当前)
                       nil); //密码(当前)

       Args := nil;
       StartService(Service, 0, Args);
       CloseServiceHandle(Service);
    finally
       CloseServiceHandle(SCManager);
    end;
    Result := True;
    end;

    procedure UninstallService(ServiceName: string);
    var
    SCManager,Service: THandle;
    ServiceStatus: SERVICE_STATUS;
    begin
    SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
    if SCManager = 0 then Exit;
    try
       Service := OpenService(SCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
       ControlService(Service, SERVICE_CONTROL_STOP, ServiceStatus);
       DeleteService(Service);
       CloseServiceHandle(Service);
    finally
       CloseServiceHandle(SCManager);
    end;
    end;

    procedure ServiceCtrlHandler(Control: dword); stdcall;
    begin
    case Control of
       SERVICE_CONTROL_STOP:
       begin
         Stopped := True;
         Status.dwCurrentState := SERVICE_STOPPED;
       end;
       SERVICE_CONTROL_PAUSE:
       begin
         Paused := True;
         Status.dwcurrentstate := SERVICE_PAUSED;
       end;
       SERVICE_CONTROL_CONTINUE:
       begin
         Paused := False;
         Status.dwCurrentState := SERVICE_RUNNING;
       end;
       SERVICE_CONTROL_INTERROGATE: ;
       SERVICE_CONTROL_SHUTDOWN: Stopped := True;
    end;
    SetServiceStatus(StatusHandle, Status);
    end;

  • 相关阅读:
    【剑指offer】把字符串转换成整数
    【剑指offer】不用加减乘除做加法
    【剑指offer】求1+2+3+...+n
    【剑指offer】孩子们的游戏(圆圈中最后剩下的数)
    【剑指offer】扑克牌顺子
    【剑指offer】翻转单词顺序列
    【剑指offer】左旋转字符串
    【剑指offer】和为S的两个数字
    【剑指offer】和为S的连续正数序列
    2019.1.10 Mac安装Nginx服务器
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940879.html
Copyright © 2011-2022 走看看