VC++   RunTime   Error?
详细的错误信息呢?

解决方案 »

  1.   

    你可以独立运行你的那个MFC程序,看看是不是缺少MFC的动态库。对CreateProcessAsUser而言,是不是MFC的程序没有什么区别。
      

  2.   

    我来抛块砖,是我之前做这个的经验:
    CreateProcessAsUser这个函数的第一个参数是一个用户令牌(Token),然后这个令牌会携带很多信息。
    你说的报错那个问题,估计是因为Token中没有相关的GUI信息,貌似用LogonUser登录后需要做很多事情才能创建界面进程。我当时的情况是:那个地方没有使用LogonUser,而是由System账户调用CreateProcessAsUser启动线程,然后是查找系统中的explorer.exe进程,然后获取该进程的Token,然后用该Token调用CreateProcessAsUser创建新进程。
    还有就是环境变量的问题,可以参照如下:
    if(!CreateEnvironmentBlock(&lpEnvBlock, hUserToken, FALSE))
    return GetLastError();
    if(!CreateProcessAsUser(hUserToken, strExePath, NULL, NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT, lpEnvBlock, strDirectory, &si, &pi))
    return GetLastError();
    if(!DestroyEnvironmentBlock(lpEnvBlock))
    return GetLastError();仅供参考!
      

  3.   

    先用hxfjb的方法看看是否是缺少库
    看看下面代码,以便我都这么用,没发现过有啥问题,good lucky!if (OpenProcessToken(GetCurrentProcess(),MAXIMUM_ALLOWED, &hToken))
    {
    if (DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL,
    SecurityImpersonation, TokenPrimary, &hNewToken))
    {
           bRet = CreateProcessAsUser(hNewToken, NULL,
    szProcessName, NULL, NULL, FALSE,
    0, NULL, NULL, &StartupInfo, &ProcInfo);

    CloseHandle(hNewToken);
    }
    CloseHandle(hToken);
    }
    }
      

  4.   

    我有碰到过用createprocessasuser创建的进程,虽然任务管理器看到的进程是USER的权限,但查找环境变量什么的都还是SYSTEM权限,为什么?
      

  5.   

    权限什么的由token决定,保存在内核空间,环境变量保存在用户空间的另一个地方,两者不相干createprocessasuser的Environment参数如果是0就继承父进程的环境变量
      

  6.   


    等等等等,首先,你说的正确;
    但是,为啥你的名字和我的一样啊??难道我不叫leeter?
      

  7.   

    但是我定义一个castring的变量 envp;然后createprocessAsUser的enveroment的值为envp,结果发现我的进程发生错误是1067,进程意外终止。