我在NT服務下註冊了一個自己寫的程序,該程序通過配置文件取得與數據庫連接的參數,程序註冊成功,但就是在啓動時報錯。如把與數據庫連接的參數寫死在程序中就能正常啓動。請問這應該如何解決?

解决方案 »

  1.   

    http://free.efile.com.cn/dacong/Delphi/DBBackup.rar
    我也在做系统服务,
    用delphi注册可以,就是不能启动
    我只好
    seivice1.exe/install
    这样注册就没问题,
      

  2.   


    function InstallService(SvcName, SvcDispName, SvcFullPath: string): integer; //安装指定服务
    var
      hSCM, hService: SC_HANDLE;
      sInfo: string;
      //InstallService('Service1', 'Ari''s Service1', 'G:\test\service\AriSerApp.exe');
    begin
      result := 0;
      hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
      if hSCM = 0 then
      begin
        result := GetLastError;
        {$IFDEF DEBUG}
        ShowMessage(SysErrorMessage(result));
        {$ENDIF}
        exit;
      end;  
      try
        hService := CreateService(hSCM,
          PChar(SvcName),
          PChar(SvcDispName),
          SERVICE_START, //SERVICE_START OR SERVICE_QUERY_STATUS OR _DELETE, SERVICE_ALL_ACCESS
          SERVICE_WIN32_OWN_PROCESS,
          SERVICE_AUTO_START, //SERVICE_AUTO_START, SERVICE_DEMAND_START
          SERVICE_ERROR_NORMAL,
          PChar(SvcFullPath),
          nil, nil, nil, nil, nil);    if hService = 0 then
        begin
          result := GetLastError;
          {$IFDEF DEBUG}
          ShowMessage(SysErrorMessage(result));
          {$ENDIF}
          case result of
            ERROR_ACCESS_DENIED: sInfo := 'ERROR_ACCESS_DENIED';
            ERROR_CIRCULAR_DEPENDENCY: sInfo := 'ERROR_CIRCULAR_DEPENDENCY';
            ERROR_DUPLICATE_SERVICE_NAME: sInfo := 'ERROR_DUPLICATE_SERVICE_NAME';
            ERROR_INVALID_HANDLE: sInfo := 'ERROR_INVALID_HANDLE';
            ERROR_INVALID_NAME: sInfo := 'ERROR_INVALID_NAME';
            ERROR_INVALID_PARAMETER: sInfo := 'ERROR_INVALID_PARAMETER';
            ERROR_INVALID_SERVICE_ACCOUNT: sInfo := 'ERROR_INVALID_SERVICE_ACCOUNT';
            ERROR_SERVICE_EXISTS: sInfo := 'ERROR_SERVICE_EXISTS';
          end;
          {$IFDEF DEBUG}
          messagebox(0,pchar(sInfo),'',mb_iconinformation);
          {$ENDIF}
        end
        else
          CloseServiceHandle(hService);
      finally
        CloseServiceHandle(hSCM);
      end;
    end;
      

  3.   


    function unInstallService(SvcName: string): boolean; //删除指定服务
    var
      hSCM, hService: SC_HANDLE;
      ErCode: DWord;
      //if unInstallService('Service1') then
        //ShowMessage('unInstall Service success');
    begin
      Result := false;
      hSCM := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
      if hSCM = 0 then
      begin
        ErCode := GetLastError;
        {$IFDEF DEBUG}
        ShowMessage(SysErrorMessage(ErCode));
        {$ENDIF}
        exit;
      end;
      try
        hService := OpenService(hSCM, PChar(SvcName),
          SERVICE_ALL_ACCESS);
        if hService = 0 then
        begin
          ErCode := GetLastError;
          {$IFDEF DEBUG}
          ShowMessage(SysErrorMessage(ErCode));
          {$ENDIF}
          exit;
        end;
        result := DeleteService(hService);
        if not result then
        begin
          ErCode := GetLastError;
          case ErCode of
            ERROR_ACCESS_DENIED: ;
            ERROR_INVALID_HANDLE: ;
            ERROR_SERVICE_MARKED_FOR_DELETE: ;
          end;
          {$IFDEF DEBUG}
          ShowMessage(SysErrorMessage(ErCode));
          {$ENDIF}
        end;    CloseServiceHandle(hService);
      finally
        CloseServiceHandle(hSCM);
      end;
    end;