我需要從下系統運行(系統進程運行的另一個進程作爲當前用戶),另一個進程在當前用戶下運行的過程。德爾福:運行過程,用戶和系統帳戶環境變量
我可以用這個代碼運行,但與環境變量的問題..例如在新的 '用戶模式' 過程中,我看到APPDATA值是C:\ WINDOWS \ system32 \設置\ systemprofile \應用程序數據\漫遊,而不是C:\ Users \用戶名\ AppData \漫遊
function RunProcessAsCurrentUser(FileName: string): Boolean;
var
ProcessId: Integer;
hWindow, hProcess, TokenHandle: THandle;
si: Tstartupinfo;
p: Tprocessinformation;
begin
Result := False;
hWindow := FindWindow('Progman', 'Program Manager');
GetWindowThreadProcessID(hWindow, @ProcessID);
hProcess := OpenProcess (PROCESS_ALL_ACCESS, FALSE, ProcessID);
if OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, TokenHandle) then
begin
FillChar(si,SizeOf(si),0);
with Si do begin
cb := SizeOf(Si);
dwFlags := startf_UseShowWindow;
wShowWindow := SW_NORMAL;
lpDesktop := PChar('winsta0\default');
end;
Result := CreateProcessAsUser(TokenHandle, nil,
PChar('"'+FileName+'"'),
nil, nil, false, Create_default_error_mode, nil, nil, si, p);
end;
end;
問題是win7,8,10實際
我認爲,所有的過程設置從explorer.exe的複製(和新工藝爲用戶在任務管理器中運行),但看起來像是從系統保持...請幫助以解決
建議:使用Delphi'的ShellExecute()'和Windows'runas':http://www.sevenforums.com/tutorials/419-run-different-user.html – paulsm4
請注意,使用'runas'會調用UAC提升提示,而'CreateProcessAsUser()'不會。 –