第一步:新建一个控制台项目,作为关闭当前应用程序的调用程序。
using System; using System.Configuration; using System.Diagnostics; namespace RestartApp { class Program { private static string appName = ConfigurationManager.AppSettings["appName"]; static void Main(string[] args) { try { AppClose(); AppStart(); //退出应用程序 Environment.Exit(0); } catch (Exception) { throw; } } /// <summary> /// 开启应用程序 /// </summary> private static void AppStart() { ProcessStartInfo psInfo = new ProcessStartInfo(); psInfo.FileName = appName; //不显示窗体 psInfo.CreateNoWindow = true; //上级目录的文件 psInfo.WorkingDirectory = @".."; Process process; try { process = Process.Start(psInfo); } catch (Exception exception) { throw; } } /// <summary> /// 关闭应用程序 /// </summary> private static void AppClose() { Process[] proc = Process.GetProcessesByName(appName); for (int i = 0; i < proc.Length; i++) { if (proc[i].ProcessName == appName) { proc[i].Kill(); } } GC.Collect(); } } }
添加System.configuration的引用
添加配置文件app.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="appName" value="winformTest"/> </appSettings> </configuration>
其中winformTest 是我要控制重启的应用程序名称
第二步:新建工程 winformTest
界面如图:
添加代码:
using System; using System.Configuration; using System.Diagnostics; using System.Windows.Forms; namespace winformTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private string appName = ConfigurationManager.AppSettings["appName"]; private void button1_Click(object sender, EventArgs e) { ProcessStartInfo psInfo = new ProcessStartInfo(); psInfo.FileName = appName; psInfo.WorkingDirectory = @".appStart"; Process process; try { process = Process.Start(psInfo); } catch (Exception exception) { throw; } } } }
上面的目录是winformTest 请求的RestartApp所在的目录,我是放在一个单独文件夹中的
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="appName" value="RestartApp"/> </appSettings> </configuration>
第三步:将编译好的RestartApp运行文件放在appStart目录中,就可以了
测试-点击重启 软件启动RestartApp 然后RestartApp 关闭winformTest ,最后执行启动winformTest 。完成