请教大家一个问题  xp下的服务可以与桌面交互  但转到vista  win7下怎么就不行了需要怎样改动代码才能与桌面交互??

解决方案 »

  1.   

    HANDLEhTokenThis = NULL;
    HANDLEhTokenDup = NULL;
    HANDLEhThisProcess = GetCurrentProcess();
    OpenProcessToken(hThisProcess, TOKEN_ALL_ACCESS, &hTokenThis);
    DuplicateTokenEx(hTokenThis, MAXIMUM_ALLOWED,NULL, SecurityIdentification, TokenPrimary, &hTokenDup);
    DWORDdwSessionId = WTSGetActiveConsoleSessionId();
    SetTokenInformation(hTokenDup, TokenSessionId, &dwSessionId, sizeof(DWORD));
    STARTUPINFOsi;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(STARTUPINFO));
    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
    si.cb = sizeof(STARTUPINFO);
    si.lpDesktop = "WinSta0\\Default";
    LPVOIDpEnv = NULL;
    DWORDdwCreationFlag = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE;
    CreateEnvironmentBlock(&pEnv, hTokenDup, FALSE);
    CreateProcessAsUser(
                  hTokenDup,
                  NULL,
                  (char *)"notepad", 
                  NULL,
                  NULL,
                  FALSE,
                  dwCreationFlag,
                  pEnv,
                  NULL,
                  &si,
                  &pi);
      

  2.   

    关键就是SESSION问题。楼上方法应该可以
      

  3.   

    执行 CreateProcessAsUser 总是会返回 false 这是为什么?