1060: 指定的服务并未以已安装的服务存在。
请问调用这个函数还需要什么样的服务必须在运行着吗?
这个在我自己的电脑上可以正常使用,在公司机器上无法以其他用户创建进程。
求教。

解决方案 »

  1.   

    代码如下所示:#include <windows.h>
    #include <stdio.h>
    #include <userenv.h>#pragma comment(lib, "Advapi32.lib")
    #pragma comment(lib, "Userenv.lib")#ifdef UNICODE
        #define RunAsUser RunAsUserW
    #else
        #define RunAsUser RunAsUserA
    #endifBOOL WINAPI RunAsUserW(LPCWSTR userName, LPCWSTR pswd, LPWSTR application)
    {
        BOOL bRet = FALSE;    do
        {
            DWORD     dwSize = MAX_PATH;
            HANDLE    hToken;
            LPVOID    lpvEnv;
            PROCESS_INFORMATION pi = {0};
            STARTUPINFOW si = {sizeof(STARTUPINFO)};
            wchar_t szUserProfile[MAX_PATH] = {0};        if (!LogonUserW(userName,
                            L".",
                            pswd,
                            LOGON32_LOGON_INTERACTIVE,
                            LOGON32_PROVIDER_DEFAULT,
                            &hToken))
            {
                break;
            }        if (!CreateEnvironmentBlock(&lpvEnv, hToken, TRUE))
            {
                break;
            }        if (!GetUserProfileDirectoryW(hToken, szUserProfile, &dwSize))
            {
                break;
            }        if (!CreateProcessWithLogonW(userName,
                                         NULL,
                                         pswd,
                                         LOGON_WITH_PROFILE,
                                         NULL,
                                         application,
                                         CREATE_UNICODE_ENVIRONMENT,
                                         NULL,
                                         szUserProfile,
                                         &si,
                                         &pi))
            {
                DestroyEnvironmentBlock(lpvEnv);
                break;
            }        DestroyEnvironmentBlock(lpvEnv);
            CloseHandle(hToken);
            CloseHandle(pi.hProcess);
            CloseHandle(pi.hThread);        bRet = TRUE;
        } while (FALSE);    return bRet;
    }BOOL WINAPI RunAsUserA(LPCSTR userName, LPCSTR pswd, LPSTR application)
    {
        BOOL bRet = FALSE;
        LPWSTR wUName = NULL;
        LPWSTR wPswd = NULL;
        LPWSTR wApp = NULL;    do
        {
            unsigned int nameLen = strlen(userName);
            unsigned int pswdLen = strlen(pswd);
            unsigned int appLen = strlen(application);        wUName = (LPWSTR)malloc((nameLen + 1) * sizeof(wchar_t));
            wPswd = (LPWSTR)malloc((pswdLen + 1) * sizeof(wchar_t));
            wApp = (LPWSTR)malloc((appLen + 1) * sizeof(wchar_t));
            if(!wUName || !wPswd || !wApp)
            {
                break;
            }        memset(wUName, 0, (nameLen + 1) * sizeof(wchar_t));
            memset(wPswd, 0, (pswdLen + 1) * sizeof(wchar_t));
            memset(wApp, 0, (appLen + 1) * sizeof(wchar_t));        MultiByteToWideChar(GetACP(), 0, userName, nameLen, wUName, nameLen + 1);
            MultiByteToWideChar(GetACP(), 0, pswd, pswdLen, wPswd, pswdLen + 1);
            MultiByteToWideChar(GetACP(), 0, application, appLen, wApp, appLen + 1);        bRet = RunAsUserW(wUName, wPswd, wApp);
        } while (FALSE);    if(wUName)
        {
            free(wUName);
        }
        if(wPswd)
        {
            free(wPswd);
        }
        if(wApp)
        {
            free(wApp);
        }
        return bRet;
    }int main(int argc, char** argv)
    {
        if(argc != 4)
        {
            printf("Usage: %s username password application\n", argv[0]);
            return 1;
        }
        if(!RunAsUser(argv[1], argv[2], argv[3]))
        {
            printf("创建进程失败\n");
        }    return 0;
    }
      

  2.   

    需要 secondary logon 服务运行才行.