创建服务时,发现创建失败:
SC_HANDLE schService = CreateService( 
        schSCManager,              // SCManager database 
        "SystemSaver_Srv",         // name of service 
        lpszDisplayName,           // service name to display 
        SERVICE_ALL_ACCESS,        // desired access 
        SERVICE_WIN32_OWN_PROCESS, // service type 
        SERVICE_SYSTEM_START,//SERVICE_AUTO_START,      // start type 
        SERVICE_ERROR_NORMAL,      // error control type 
        lpszBinaryPathName,        // service's binary 
        NULL,                      // no load ordering group 
        NULL,                      // no tag identifier 
        NULL,                      // no dependencies 
        NULL,                      // LocalSystem account 
        NULL);                     // no password 
若将SERVICE_SYSTEM_START 改为 SERVICE_AUTO_START 则可以成功,但是我想在winxp登录前就让它运行。

解决方案 »

  1.   

    在注册表run目录下,写入要运行的程序,这样就可以在登录前启动了
      

  2.   

    你这样写登录后用帐户LocalSystem启动 ,登录前用什么帐户启动服务呢?你把这两个参数置为管理员先试试SC_HANDLE schService = CreateService( 
            .......
            NULL,                      // LocalSystem account 
            NULL);                     // no password
      

  3.   

    我只想知道,如何将SERVICE_SYSTEM_START注册成功
      

  4.   

    就是用SERVICE_AUTO_START,这样才是系统自动启动的。
    SERVICE_SYSTEM_START是指的由服务管理器来管理的,并不是指的自动启动服务。
    只注册成服务是没有用的,你的程序必须是服务程序才能被服务管理器管理。
    在CSDN搜索“服务程序”,会找到相关的文章。
      

  5.   

    我已经编写了服务程序,他有一个界面,我想让他在winxp登陆界面出现之前或同时就出现
      

  6.   

    如果是服务,只能为SERVICE_AUTO_START才能自启动
    否则可以在注册表中做,比如:放在键RUN
    或BootExecute下
      

  7.   

    如果不用服务也可以,只要能在windows登录界面运行时弹出我的对话框
    注册表,Run不可以,它是在登陆后运行的
    BootExecute是什么?能写出全路径么?
      

  8.   

    我的对话框还是不显示
    只能在登录后才能显示我将CreateService最后两个参数设置了,让他以管理员登录运行,
    可是界面不见了HDESK   hdeskCurrent;
        HDESK   hdesk;
        HWINSTA hwinstaCurrent;
        HWINSTA hwinsta;    hwinstaCurrent = GetProcessWindowStation();
        if (hwinstaCurrent == NULL)
    {   
    pf=fopen("c:\\liutaol.txt","a+");
    fputs("GetProcessWindowStation Failed:",pf);
    fclose(pf);
            return FALSE;
        }    hdeskCurrent = GetThreadDesktop(GetCurrentThreadId());
        if (hdeskCurrent == NULL){
    pf=fopen("c:\\liutaol.txt","a+");
    fputs("GetThreadDesktop Failed:",pf);
    fclose(pf);
           return FALSE;
           }//打开winsta0
        hwinsta = OpenWindowStation("winsta0", FALSE,                          
                                      WINSTA_ACCESSCLIPBOARD   |
                                      WINSTA_ACCESSGLOBALATOMS |
                                      WINSTA_CREATEDESKTOP     |
                                      WINSTA_ENUMDESKTOPS      |
                                      WINSTA_ENUMERATE         |
                                      WINSTA_EXITWINDOWS       |
                                      WINSTA_READATTRIBUTES    |
                                      WINSTA_READSCREEN        |
                                      WINSTA_WRITEATTRIBUTES);
        if (hwinsta == NULL){
    pf=fopen("c:\\liutaol.txt","a+");
    fputs("OpenWindowStation Failed:",pf);
    fclose(pf);
           return FALSE;
           }    if (!SetProcessWindowStation(hwinsta)){
    pf=fopen("c:\\liutaol.txt","a+");
    fputs("SetProcessWindowStation Failed:",pf);
    fclose(pf);
           return FALSE;
           }//打开desktop
        hdesk = OpenDesktop("default", 0, FALSE,                
                                DESKTOP_CREATEMENU |
                                DESKTOP_CREATEWINDOW |
                                DESKTOP_ENUMERATE    |
                                DESKTOP_HOOKCONTROL  |
                                DESKTOP_JOURNALPLAYBACK |
                                DESKTOP_JOURNALRECORD |
                                DESKTOP_READOBJECTS |
                                DESKTOP_SWITCHDESKTOP |
                                DESKTOP_WRITEOBJECTS);
           if (hdesk == NULL){
    pf=fopen("c:\\liutaol.txt","a+");
    fputs("OpenDesktop Failed:",pf);
    fclose(pf);
               return FALSE;
           }       SetThreadDesktop(hdesk); // 界面
       DialogBox(hInst, MAKEINTRESOURCE(IDD_MAINFORM),NULL,NULL);
       if (!SetProcessWindowStation(hwinstaCurrent))
               return FALSE;       if (!SetThreadDesktop(hdeskCurrent))
          return FALSE;       if (!CloseWindowStation(hwinsta))
                  return FALSE;       if (!CloseDesktop(hdesk))
               return FALSE;