Windowsで--onefileモードを使用してpyinstallerによってパックされたプログラムがあります。1 つはメイン プロセス用、もう 1 つはツールキット用で、その場で更新したいと考えています。
以下のような更新フローを計画しています。
- メイン プロセス exe の起動時に、パッチ ファイルがあるかどうかを確認します。存在する場合は、ツールキットを update.exe にコピーし、デタッチ モードで「update.exe アップグレード」を開始します。メイン プロセスはすぐに終了し、update.exe にその仕事をさせます。
- update.exe はパッケージに含まれていないため、置換ジョブを適切に実行できます。
- その後、update.exe がメイン プロセス exe を開始し、これもデタッチ モードです。
動作するはずですが、プログラムは別のプログラムを開始しません。
切り離されたプロセスを開始するコード:
subprocess.Popen(command, stdin=None, stdout=None, stderr=None, close_fds=True,
creationflags=0x00000008)
コードは、python スクリプトで pyinstaller exe を起動し、pyinstaller exe で memcached.exe のような通常のプログラムを起動すると機能します。pyinstaller によってパックされたプログラムだけでは、別のプログラムを起動できないようです。
それを修正する方法、または更新のための他の解決策はありますか
更新: これは pyinstaller2.0 のバグで、最新の開発ブランチで修正されています。 http://www.pyinstaller.org/ticket/569