0

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

4

1 に答える 1

2

バージョン 2.0 で作成された 2 つの PyInstaller アプリケーションで同じエラーが発生しました (app1 は app2 を実行する必要があります)。

app1 から os.system、subprocess.call、os.startfile を試して app2 を実行しましたが、すべて失敗し、問題に関する情報を取得できません。

最後に、app1 を PyInstaller 1.5.1 で再ビルドし、app2 (V 2.0 でビルド) を問題なく実行できました。

バグを PyInstaller Team に報告しようと思います。

于 2012-08-27T03:28:13.073 に答える