【问题标题】:Restart a process [exe] in Windows在 Windows 中重新启动进程 [exe]
【发布时间】:2009-07-29 11:18:08
【问题描述】:

我有一个 C++ exe;在特定情况下,我需要停止 exe 并重新启动它。这必须在同一个 exe 内完成,而不是从外部完成。实现这一目标的最佳方法是什么?

我的猜测是启动一个新的进程实例,然后杀死正在运行的进程。但是是否有任何直接的 API 可以做到这一点,比如 RestartProcess() 或其他什么?如果不是,你有什么建议?

【问题讨论】:

  • 嘿生锈,只是出于兴趣,你为什么要把它变成一个社区维基?
  • 最好解释一下您认为需要这样做的原因 - 可能有更好、更简单的解决方案。
  • @Neil:不知道 rusty,但我有时会实现非常相似的东西,以支持自动升级正在运行的软件,无需任何用户干预:程序重命名当前应用程序。 exe 到 app_old.exe,然后下载新的 .exe 并将其作为 app.exe 写入磁盘,然后调用 CreateProcess()。失败时,仍在运行的旧版本会删除新的 app.exe,将 app_old.exe 重命名为 app.exe,并记录错误。在明显成功时,它只是自行关闭。但如果您有更好的解决方案,请告诉我们! (我这样做非常像Sharptooth向他解释=> +1。:)
  • (我知道这种方法听起来可能有些滥用,实际上我在编写实现时也有同样的感觉……但最后,它运行得很好。)
  • 好的,原因是外部硬件触发。在这种情况下必须重新启动该过程。

标签: c++ winapi


【解决方案1】:

不,没有这样的内置方法。您确实必须检测可执行文件的路径(GetCurrentModule(),然后是 GetModuleFileName()),运行新进程(CreateProcess()),然后退出当前进程(ExitProcess())。

【讨论】:

    【解决方案2】:

    使用标准的exec 函数。它运行一个程序并且不返回,实际上是用一个新程序替换当前正在运行的程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多