ProcessUtil.cs 3.1 KB
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Common
{
    /// <summary>
    /// 软件管理工具
    /// </summary>
    public class ProcessUtil
    {
        /// <summary>
        /// 设置自动启动
        /// </summary>
        /// <param name="strName"></param>
        /// <param name="value"></param>
        public static void AutoRun(string strName, bool value)
        {
            try
            {
                //创建启动对象 
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                //设置运行文件
                startInfo.FileName = System.Windows.Forms.Application.StartupPath + "\\AuToRunManager.exe";
                //设置启动参数 
                startInfo.Arguments = String.Join(" ", new string[2] { strName, value.ToString() });
                //设置启动动作,确保以管理员身份运行
                startInfo.Verb = "runas";
                //如果不是管理员,则启动UAC 
                System.Diagnostics.Process.Start(startInfo);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        public static Process StartProcess(string appName, string baseDir = @".\",int waitIdle=5000)
        {
            try
            {
                Process process = new Process();
                process.StartInfo = new System.Diagnostics.ProcessStartInfo();
                process.StartInfo.FileName = appName+".exe";
                process.StartInfo.WorkingDirectory = baseDir;
                process.Start();
                process.WaitForInputIdle(waitIdle);
                return process;
            }
            catch (Exception ex)
            {

            }
            return null;
        }
        public static Process IsRun(Process process)
        {
            Process processRun = new Process();
            try
            {
                System.Diagnostics.Process[] processList = System.Diagnostics.Process.GetProcesses

();
                foreach (System.Diagnostics.Process process2 in processList)
                {
                    if (process2.Id == process.Id)
                    {
                        processRun = process;

                    }
                }
            }
            catch { }

            return processRun;
        }

        public static bool CloseProcess(Process process)
        {
            bool sc = false;
            try
            {
                System.Diagnostics.Process[] processList = System.Diagnostics.Process.GetProcesses();
                foreach (System.Diagnostics.Process process2 in processList)
                {
                    if (process2.Id == process.Id)
                    {
                        process.Kill(); //结束进程
                        sc = process.WaitForExit(100000);

                    }
                }
            }
            catch { sc = true; }
            return sc;
        }
    }
}