CreateProcessWithLogonW 不成功。错误码 1060 1060: 指定的服务并未以已安装的服务存在。请问调用这个函数还需要什么样的服务必须在运行着吗?这个在我自己的电脑上可以正常使用,在公司机器上无法以其他用户创建进程。求教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码如下所示:#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;} 需要 secondary logon 服务运行才行. 请问vc控件ComboBox的data内容(汉字)怎么跟数据库中的代码(数字)关联 BYTE[24] USERID ,如何取USERID的前18位,并转换成CString 菜单条右面区域颜色怎么改? 给TreeView视图添加的图标为什么没有显示出来呀? 新手问几个问题 请问SetTimer(x,x,x)怎么使用呢? ATL中的服务是怎么回事? 请问为什么VC调试的时候总会进入汇编界面,怎么才能避免进入汇编界面呢? 多线程编程中的问题 VC连接SQLite数据库,用的CppSQLite类,编译出现错误 CreateProcessWithLogonW 不成功。错误码 1060 音视频处理
#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;
}