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)
std* の切り離された作成フラグとパイプで popen を使用すると、親プロセスが終了した後に存続する新しいプロセスが開始されます。それはすべて良いことです。問題は、新しい「子」プロセスがまだ親へのファントム ハンドルを保持していることです。したがって、親exeをアンインストールしようとすると(私のpythonスクリプトはpyinstallerを介してexeにバンドルされています)、msiexecは親exeがまだ使用中であると不平を言います。
したがって、目標は、元のプロセスへのハンドルを持たない「some_exe.exe」を実行する完全に独立したプロセスを生成することです。
注: これは Windows XP 以降の場合です。私はWin7で開発しています。