我需要ShellExecute
東西作爲另一個用戶,目前我開始一個幫助進程CreateProcessAsUser
,調用ShellExecute
,但這似乎太多的黑客(錯誤的父進程等)是否有更好的方法來做這個?CreateProcessAsUser vs ShellExecute
@PabloG:ImpersonateLoggedOnUser不起作用:
HANDLE hTok; VERIFY(LogonUser("otheruser",0,"password",LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&hTok)); VERIFY(ImpersonateLoggedOnUser(hTok)); ShellExecute(0,0,"calc.exe",0,0,SW_SHOW); RevertToSelf(); CloseHandle(hTok);
將剛開始計算作爲登錄的用戶,而不是 「otheruser」
@ 1800信息:CreateProcess
/CreateProcessAsUser
是不一樣的ShellExecute
,如果在Vista上使用UAC,CreateProcess
在您無法控制用戶正在執行的程序時是無用的(如果您給它帶有標記爲requireAdmin的清單的exe文件,則CreateProcess
將返回錯誤)
@Brian R. Bondy:我已經知道這個信息(並且不要誤解我的意思,它是好東西),但它是脫離主題(恕我直言)我要求的是ShellExecuteAsUser
,而不是作爲另一個用戶啓動進程,我已經知道如何做到這一點。
我敢肯定,我試過這個,它沒有工作,因爲新進程產生的當前進程的令牌,而不是它的線程 – Anders 2009-02-16 02:05:44
這可能工作,如果在一個進程的主線程完成,但它會如果在單獨的線程中完成,則不起作用,因爲ShellExecute使用主線程的標記/安全上下文。去搞清楚。現在...如果你的應用程序有多個線程,在主線程中進行模擬/還原可能會導致應用程序的其他部分中斷。 – 2012-12-31 04:17:43