微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重新启动一个应用程序本身

我想用自己重新启动的函数来构build我的应用程序。 我在codeproject上find

processstartinfo Info=new processstartinfo(); Info.Arguments="/C choice /CY /N /DY /T 3 & Del "+ Application.ExecutablePath; Info.WindowProcessWindowStyle.Hidden; Info.CreateNowindow=true; Info.FileName="cmd.exe"; Process.Start(Info); Application.Exit();

这根本不起作用…另一个问题是,如何像这样再次启动它? 也许也有启动应用程序的理由。

编辑:

http://www.codeproject.com/script/Articles/ArticLeversion.aspx?aid=31454&av=58703

在另一个应用程序中调用public function

“GodMode”文件内容c#

如何在C#中使用Process.Start中的空格处理值

我如何以编程方式find我的MEGAsync文件夹?

Mono在Linux上的当前状态?

需要UAC保护资源的整个列表以标准用户身份运行我的应用程序(unlevated)

什么是Windows或.Net的DVD刻录组件?

ASP.NET核心RC2作为linux deamon

如何遍历物理文件夹并在C#中读取叶文件

C# – closuressubprocess的inputstream

我使用类似的代码来重新启动应用程序时尝试的代码。 我发送一个定时cmd命令为我重新启动应用程序是这样的:

processstartinfo Info = new processstartinfo(); Info.Arguments = "/C ping 127.0.0.1 -n 2 && "" + Application.ExecutablePath + """; Info.WindowStyle = ProcessWindowStyle.Hidden; Info.CreateNowindow = true; Info.FileName = "cmd.exe"; Process.Start(Info); Application.Exit();

该命令被发送到操作系统,ping将脚本暂停2-3秒,此时应用程序已经退出Application.Exit() ,然后在ping之后的下一个命令再次启动它。

注意: "将引号放在路径的周围,因为它有空格,cmd无法引号处理。

希望这可以帮助!

为什么不使用

Application.Restart();

??

更多关于重新启动

为什么不只是以下?

Process.Start(Application.ExecutablePath); Application.Exit();

如果你想确保应用程序不会运行两次,可以使用Environment.Exit(-1)来瞬间杀死进程(不是真正的好方法),或者像启动第二个应用程序,它检查主应用程序的进程并在流程结束后立即重新启动。

你有最初的应用程序A,你想重新启动。 所以,当你想杀A时,一个小应用程序B被启动,B杀A,然后B启动A,杀B

开始一个过程:

Process.Start("A.exe");

杀死一个进程就是这样的

Process[] procs = Process.GetProcessesByName("B"); foreach (Process proc in procs) proc.Kill();

Winforms有Application.Restart()方法,就是这样做的。 如果你使用的是WPF,你可以简单地添加一个对System.Windows.Forms的引用并调用它。

很多人都建议使用Application.Restart。 实际上,这个功能很少按预期执行。 我从来没有关闭过我从中调用的应用程序。 我一直不得不通过其他方法关闭应用程序,例如关闭主窗体。

你有两种处理方法。 您可以有一个外部程序关闭调用进程并启动一个新的程序,

要么,

如果将参数作为重新启动传递,则新软件的启动会终止相同应用程序的其他实例。

private void Application_Startup(object sender,StartupEventArgs e) { try { if (e.Args.Length > 0) { foreach (string arg in e.Args) { if (arg == "-restart") { // WaitForConnection.exe foreach (Process p in Process.GetProcesses()) { // In case we get Access Denied try { if (p.Mainmodulee.FileName.ToLower().EndsWith("yourapp.exe")) { p.Kill(); p.WaitForExit(); break; } } catch { } } } } } } catch { } }

另一种比这些解决方案感觉更简洁的方法是运行一个包含特定延迟的批处理文件,以等待当前应用程序终止。 这具有防止两个应用程序实例同时打开的附加好处。

Windows批处理文件示例(“restart.bat”):

sleep 5 start "" "C:DevMyApplication.exe"

在应用程序中,添加以下代码

// Launch the restart batch file Process.Start(@"C:Devrestart.bat"); // Close the current application (for WPF case) Application.Current.MainWindow.Close(); // Close the current application (for WinForms case) Application.Exit();

我的解决方

private static bool _exiting; private static readonly object SynchObj = new object(); public static void ApplicationRestart(params string[] commandLine) { lock (SynchObj) { if (Assembly.GetEntryAssembly() == null) { throw new NotSupportedException("RestartNotSupported"); } if (_exiting) { return; } _exiting = true; if (Environment.Osversion.Version.Major < 6) { return; } bool cancelExit = true; try { List<Form> openForms = Application.OpenForms.OfType<Form>().ToList(); for (int i = openForms.Count - 1; i >= 0; i--) { Form f = openForms[i]; if (f.Invokerequired) { f.Invoke(new MethodInvoker(() => { f.FormClosing += (sender,args) => cancelExit = args.Cancel; f.Close(); })); } else { f.FormClosing += (sender,args) => cancelExit = args.Cancel; f.Close(); } if (cancelExit) break; } if (cancelExit) return; Process.Start(new processstartinfo { UseShellExecute = true,WorkingDirectory = Environment.CurrentDirectory,FileName = Application.ExecutablePath,Arguments = commandLine.Length > 0 ? string.Join(" ",commandLine) : string.Empty }); Application.Exit(); } finally { _exiting = false; } } }

.Net应用程序解决方案如下所示:

System.Web.HttpRuntime.UnloadAppDomain()

在myconfig文件中更改AppSettings之后,我使用它来重新启动我的Web应用程序。

System.Configuration.Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~"); configuration.AppSettings.Settings["SiteMode"].Value = model.SiteMode.ToString(); configuration.Save();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐