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

在Windows中重新启动进程[exe] 我有一个C++ exe;在特定情况下,我需要停止exe并再次启动它。这必须在同一个exe内完成,而不是从外部完成。实现这一目标的最佳方式是什么,c++,winapi,C++,Winapi,我的猜测是启动一个新的进程实例,然后终止正在运行的进程。但是有没有什么直接的API可以做到这一点,比如RestartProcess()之类的?如果没有,你有什么建议?没有,没有这样的内置方法。您确实需要检测可执行文件的路径(GetCurrentModule(),然后是GetModuleFileName()),运行新进程(CreateProcess()),然后退出当前进程(ExitProcess())。使用标准函数。它运行一个程序而不返回,实际上是用一个新的程序替换当前运行的程序。嘿,rusty,

我的猜测是启动一个新的进程实例,然后终止正在运行的进程。但是有没有什么直接的API可以做到这一点,比如RestartProcess()之类的?如果没有,你有什么建议?

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

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

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