我正在尝试从 python 启动一个完全独立的进程。我不能使用像 os.startfile 这样简单的东西,因为我需要传递参数。目前我正在使用 subprocess.popen ,它可以让我完成 90% 的工作。
args = ["some_exe.exe", "some_arg", "another_arg"]
subprocess.Popen(args, creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
将 popen 与 std* 的分离创建标志和管道一起使用确实会启动一个新进程,该进程在父进程死亡后仍然存在。所以这一切都很好。问题是新的“子”进程仍然持有父进程的虚拟句柄。因此,如果我尝试卸载父 exe(我的 python 脚本通过 pyinstaller 捆绑到一个 exe 中),msiexec 会抱怨父 exe 仍在使用中。
所以目标是产生一个完全独立的进程来运行“some_exe.exe”,它没有任何句柄回到原始进程。
注意:这适用于 Windows XP 及更高版本。我正在Win7上开发。