【问题标题】:'Application.Restart' not working in ClickOnce deployed application [duplicate]“Application.Restart”在 ClickOnce 部署的应用程序中不起作用 [重复]
【发布时间】:2023-09-17 08:49:01
【问题描述】:

可能重复:
Why is Application.Restart() not reliable?

我拉了the code straight from MSDN。这会更新我的应用程序,但 Restart() 不起作用。应用程序关闭,但不会重新启动。

我在Form 中添加了MenuItem,以验证Restart() 是否有效:

private void restartToolStripMenuItem_Click(object sender, EventArgs e)
{
    Application.Restart();
}

这将重新启动应用程序(当然,它不执行更新并且是用户启动的,所以它相当无用)。

我对这个应用程序没有其他任何事情要做。关闭时表单没有事件处理程序,什么都没有。这是我可以构建的最基本的Windows Forms 应用程序(它只是在ImagePanel 中显示资源JPEG)。

为什么Restart() 在这里不起作用?

【问题讨论】:

  • this其他SO问题。

标签: c# clickonce restart updating


【解决方案1】:

尝试提出一个新流程,也许可以解决它:

Process.Start(Application.ExecutablePath);

【讨论】:

  • 这不适用于单击一次部署的应用程序
【解决方案2】:

您的应用程序是Windows Forms 还是WPF?因为Application.Restart 只存在于 Windows 窗体 Application 对象 (System.Windows.Forms.Application) 中,并且在 WPF Application (System.Windows.Applications) 下运行的应用程序不支持。你仍然可以调用它,但由于应用程序上下文不同,它不起作用。

【讨论】:

    【解决方案3】:

    尝试用BeginInvoke 包裹它,以防它不在STA 主线程上。

    【讨论】:

      【解决方案4】:

      如果您使用 Mutex 或类似的东西来确保一次只运行一个应用程序实例,则会导致此问题。

      【讨论】:

        【解决方案5】:

        您确定要从主窗体调用 Application.Restart 吗?如果您使用 .ShowDialog 调用表单,然后从该表单调用 Application.Restart,它将不起作用,因为 .ShowDialog 会导致对话框表单在单独的线程上运行。

        【讨论】:

        • 只有主窗体。我正在使用尽可能简单的应用程序来消除错误。
        最近更新 更多