У меня есть программа установки, которая пытается (повторно) запустить мое приложение в текущем пользовательском контексте после завершения установки. Установщик работает в контексте SYSTEM, и перед запуском приложения он пытается (и теоретически успешно) выдавать себя за текущего пользователя. Однако, когда я смотрю в диспетчере задач, я вижу, что мое приложение работает в контексте SYSTEM.ImpersonateLoggedOnUser успешно, но вторичный процесс все еще выполняется в начальном контексте
Это (отрывок из) мой код:
TCHAR szUsername[128] = _T("");
DWORD dwUsernameSize = 128;
GetUserName(szUsername, &dwUsernameSize);
// Lets the calling process impersonate the security context of a logged-on user.
if (!ImpersonateLoggedOnUser(hToken))
{
throw Win32Exception(GetLastError(), _T("Failed to impersonate current user"));
}
TCHAR szUsername2[128] = _T("");
DWORD dwUsernameSize2 = 128;
GetUserName(szUsername2, &dwUsernameSize2);
MLOGD(_T("ProcessUtils::StartProcessInCurrentUserContext: Successfully impersonated %s"), szUsername2);
ProcessUtils::StartProcess(sExeName, lstParams, sWorkingDir, bWaitToFinish, errCode);
ProcessUtils :: StartProcess является оберткой CreateProcess.
szUsername содержит SYSTEM, а szUsername2 содержит текущего пользователя. Таким образом ImpersonateLoggedOnUser успешно. Однако, как упоминалось выше, процесс запускается в контексте SYSTEM, а не в текущем пользовательском.
Я не уверен, насколько это полезно, но мой установщик написан в NSIS, и он вызывает функцию, которая содержит код сверху через плагин, написанный на C/C++.
Кто-нибудь знает, почему мое приложение не запускается в текущем контексте пользователя?
Wow! Это что-то. К счастью, CreateProcessAsUser работал для меня, но ваше решение хорошо знать, если что-то пойдет не так с подходом CreateProcessAsuser. – conectionist
Будьте осторожны, чтобы не называть этот код слишком быстро при запуске. FindWindowSW вернет S_FALSE и вернет нулевой указатель, если он был вызван до того, как рабочий стол был запущен. Мы видим это много, когда новый пользователь входит в систему Windows 10. Для запуска рабочего стола требуется несколько минут. – tdemay