/// <summary> /// Executes the <paramref name="executable"/> and waits a maximum time of <paramref name="maxWaitMs"/> for completion. If the process doesn't end in /// this time, it gets aborted. This method tries to impersonate the interactive user and run the process under its identity. /// </summary> /// <param name="executable">Program to execute</param> /// <param name="arguments">Program arguments</param> /// <param name="priorityClass">Process priority</param> /// <param name="maxWaitMs">Maximum time to wait for completion</param> /// <returns><c>true</c> if process was executed and finished correctly</returns> public static bool TryExecute_Impersonated(string executable, string arguments, ProcessPriorityClass priorityClass = ProcessPriorityClass.Normal, int maxWaitMs = INFINITE) { IntPtr userToken; if (!ImpersonationHelper.GetTokenByProcess(out userToken, true)) { return(false); } try { string unused; return(TryExecute_Impersonated(executable, arguments, userToken, false, out unused, priorityClass, maxWaitMs)); } finally { ImpersonationHelper.SafeCloseHandle(userToken); } }
public static bool TryExecuteReadString_Impersonated(string executable, string arguments, out string result, ProcessPriorityClass priorityClass = ProcessPriorityClass.Normal, int maxWaitMs = DEFAULT_TIMEOUT) { IntPtr userToken; if (!ImpersonationHelper.GetTokenByProcess(out userToken, true)) { result = null; return(false); } try { return(TryExecute_Impersonated(executable, arguments, userToken, true, out result, priorityClass, maxWaitMs)); } finally { ImpersonationHelper.SafeCloseHandle(userToken); } }