Nol*_*oli 17 .net c# windows batch-file application-restart
我想用函数来构建我的应用程序来重启自己.我在codeproject上找到了
ProcessStartInfo Info=new ProcessStartInfo();
Info.Arguments="/C choice /C Y /N /D Y /T 3 & Del "+
Application.ExecutablePath;
Info.WindowStyle=ProcessWindowStyle.Hidden;
Info.CreateNoWindow=true;
Info.FileName="cmd.exe";
Process.Start(Info);
Application.Exit();
Run Code Online (Sandbox Code Playgroud)
这根本不起作用......另一个问题是,如何再次启动呢?也许还有启动应用程序的参数.
编辑:
http://www.codeproject.com/script/Articles/ArticleVersion.aspx?aid=31454&av=58703
Run Code Online (Sandbox Code Playgroud)
Bal*_*i C 40
我对重启应用时尝试的代码使用了类似的代码.我发送一个timed 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();
Run Code Online (Sandbox Code Playgroud)
该命令被发送到操作系统,ping暂停脚本2-3秒,此时应用程序已退出Application.Exit(),然后ping再次启动它之后的下一个命令.
注意:\"在路径周围放置引号,因为它有空格,cmd无法在没有引号的情况下处理.
希望这可以帮助!
Sha*_*hai 28
为什么不用
Application.Restart();
Run Code Online (Sandbox Code Playgroud)
??
更多关于重启
为什么不只是以下?
Process.Start(Application.ExecutablePath);
Application.Exit();
Run Code Online (Sandbox Code Playgroud)
如果你想确保应用程序没有运行两次,那么使用Environment.Exit(-1)哪个瞬间杀死进程(不是真正的好方法)或启动第二个应用程序,它会检查主应用程序的进程并立即再次启动它这个过程消失了.
你有初始应用程序A,你想重新启动.所以,当你要杀A时,启动一个小应用程序B,B杀A,然后B启动A,并杀B.
要开始一个过程:
Process.Start("A.exe");
Run Code Online (Sandbox Code Playgroud)
杀死一个进程就是这样的
Process[] procs = Process.GetProcessesByName("B");
foreach (Process proc in procs)
proc.Kill();
Run Code Online (Sandbox Code Playgroud)
很多人建议使用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.MainModule.FileName.ToLower().EndsWith("yourapp.exe"))
{
p.Kill();
p.WaitForExit();
break;
}
}
catch
{ }
}
}
}
}
}
catch
{
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79697 次 |
| 最近记录: |