开发C#.NET 2.0 WinForm应用程序.需要应用程序关闭并重新启动自身.

Application.Restart();

上述方法有proven to be unreliable个参数.

重启应用程序的更好方法是什么?

推荐答案

不幸的是,您不能使用流程.Start()启动当前正在运行的进程的实例.根据流程.开始()文档:

这项技术在VS调试器下可以很好地工作(因为VS会使用某种魔术,使Process.Start认为进程尚未运行),但如果不在调试器下运行,则会失败.(请注意,这可能是特定于操作系统的-我似乎记得在我的一些测试中,它可以在XP或Vista上运行,但我可能只记得在调试器下运行它.)

这项技术正是我目前工作的项目中最后一位程序员所使用的技术,我一直在努力寻找解决方法.到目前为止,我只找到了一个解决方案,对我来说,这感觉既脏又笨拙:启动第二个应用程序,在后台等待第一个应用程序终止,然后重新启动第一个应用程序.我相信这会管用,但是,真恶心.

编辑:使用第二个应用程序可以工作.我在第二个应用中所做的就是:

    static void RestartApp(int pid, string applicationName )
    {
        // Wait for the process to terminate
        Process process = null;
        try
        {
            process = Process.GetProcessById(pid);
            process.WaitForExit(1000);
        }
        catch (ArgumentException ex)
        {
            // ArgumentException to indicate that the 
            // process doesn't exist?   LAME!!
        }
        Process.Start(applicationName, "");
    }

(这是一个非常简单的例子.真正的代码有很多健全性判断、错误处理等.)

.net相关问答推荐

DotNet COM初始化问题

为什么 ULong > 16 位的数学会变得不稳定?

在 Git for Visual Studio 2012 中恢复到以前的提交

如何在 C# 中自动删除临时文件?

单线程单元 - 无法实例化 ActiveX 控件

如何创建 LINQ to SQL 事务?

NonSerialized 属性

使用字典作为数据源绑定组合框

找不到 Microsoft.Office.Interop Visual Studio

重新启动(回收)应用程序池

简单委托(委托)与多播委托

如何比较 C# 中的(目录)路径?

WCF服务客户端:内容类型text/html;响应消息的charset=utf-8 与绑定的内容类型不匹配

是否有 Linq 方法可以将单个项目添加到 IEnumerable

监听依赖属性的变化

如何将 Excel 序列日期编号转换为 .NET DateTime?

了解 C# 中的协变和逆变接口

如何使用 NPOI 读取文件

如何卸载Microsoft .NET Core 1.0.0 RC2 - VS 2015 Tooling Preview 1?

如何从 webclient 获取状态码?