How to Start a Process Unelevated

I had best results by cloning Explorer’s token as follows: var shellWnd = WinAPI.GetShellWindow(); if (shellWnd == IntPtr.Zero) throw new Exception(“Could not find shell window”); uint shellProcessId; WinAPI.GetWindowThreadProcessId(shellWnd, out shellProcessId); var hShellProcess = WinAPI.OpenProcess(0x00000400 /* QueryInformation */, false, shellProcessId); var hShellToken = IntPtr.Zero; if (!WinAPI.OpenProcessToken(hShellProcess, 2 /* TOKEN_DUPLICATE */, out hShellToken)) throw new Win32Exception(); uint … Read more