【问题标题】:Know when application was opened with Application.Restart()使用 Application.Restart() 了解应用程序何时打开
【发布时间】:2026-01-09 18:20:05
【问题描述】:

如果我的应用程序是使用Application.Restart() 启动的,有没有办法知道它何时启动?我只在我的应用程序 updates itself automatically 时使用它,并且知道我的应用程序在更新后何时启动会很有帮助。

【问题讨论】:

  • 好吧,根据thisthis,最好制作一个单独的过程,不要使用该方法,因为它不可靠。然后你可以输入一些命令行,让你知道进程是通过你的代码初始化的。
  • 这两个问题都回到了同一个问题,Application.Restart 的失败只是他们代码中另一个错误的症状。 Application.Restart 没有任何问题
  • 嗯,这就是我通过浏览获得的……至少它们是相关链接……哈哈……

标签: c#


【解决方案1】:

您无法开箱即用地做到这一点。我想到了两种可能的解决方案:

  1. 使用用户设置来记住状态。例如,调用RestartedOnUpdate 并在调用Application.Restart() 之前将其设置为true。重新启动后将其设置为 false。
  2. 您可以使用Process.Start() 并提供某种命令行参数(如/updated)来代替Application.Restart()

实际上,在执行 ClickOnce 更新后执行设置更新是一种很好的做法,这样更改的用户设置不会重置为其默认值。

一般的做法是:

  1. 创建类似SettingsUpgradeNeeded 的设置,并在设计器中将其设置为true。然后它将像这样发布给客户。
  2. Main方法中检查设置是否为true并执行设置升级。
  3. 将设置设置为false,以便下次运行不会进行升级。

您可以使用该标志来检查您是否在 ClickOnce 更新后首次启动。

【讨论】:

  • 如果答案是“没有办法开箱即用”,这两个都是我已经想到的解决方案。
  • 就个人而言,我会选择第一个。第二个确实具有不必使用Application.Restart()的优点,另一方面Application.Restart()会将所有命令行选项传递给首先传递给它的应用程序,这可能会派上用场。
  • 不幸的是,他们won't in my context,但我还是更喜欢第一个解决方案。
  • @Fr33dan 谈到 ClickOnce 更新,我更新了我的答案,因为您可能已经拥有所需的功能。