コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        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);
            }
        }