启动独立进程(程序退出后保持活动状态)

时间:2019-05-06 18:47:42

标签: c# batch-file process

我正在开发一个程序来更新我部门开发的所有其他程序。

我希望该程序能够自我更新,为此,我需要用从FTP服务器获取的程序替换正在运行的.exe。

我试图做的是创建一个批处理文件,该文件终止应用程序的进程,将“新”可执行文件复制到应用程序的路径,然后启动它。

问题在于,当批处理文件杀死进程时,它不运行其他命令,而是与应用程序一起被杀死。

是否可以以不依赖于我的应用程序的方式运行此过程?

这是批处理文件代码:

@ECHO OFF
@BREAK OFF
taskkill /f /t /im "MyApplication.exe"
rmdir /S /Q "%APPDATA%\DepartmentTools\WorkplaceUpdate\"
mkdir "%APPDATA%\DepartmentTools\WorkplaceUpdate\"
copy "%APPDATA%\DepartmentTools\MyApplication.exe" "%APPDATA%\DepartmentTools\WorkplaceUpdate\MyApplication.exe"
"%APPDATA%\DepartmentTools\WorkplaceUpdate\MyApplication.exe"

1 个答案:

答案 0 :(得分:1)

您正在传递/ t标志that

  

/ t终止指定的进程以及由其启动的任何子进程

所以我们有

  1. 应用程序启动。
  2. 应用程序启动cmd.exe更新脚本。
  3. cmd.exe终止应用程序及其子进程,从而终止自身。

假设应用程序本身知道何时更新,则可以(并且应该)在终止自身之前彻底终止其子进程。当更新程序和“更新”应用程序是不同的应用程序时,显然不会有问题。

因此,请勿传递该标志或仅在更新其他应用程序时使用该标志,并且一切正常。

PS:虽然在运行期间以这种方式自我更新应用程序并非完全不合理,并且至少非常简单,但是在强制终止其他应用程序时使用这种方法来更新其他应用程序可能会很危险。导致不一致/部分完成的结果以及其他问题,具体取决于其他应用程序的功能。