0

Win7 マシンの Program Files (x86) フォルダーにインストールしようとしている、作成した EXE があります。本当に興味深い行動が起こっています。このプログラムには gui があり、インターフェイスを処理するために wx-Python と XRC を使用しました。ディストリビューションには XRC フォルダーが含まれています。プログラムは getcwd() を使用して自分自身を見つけ、xrc フォルダーを見つけます。ただし、これは非常に興味深いことです。プログラムを Program Files に配置すると、すべて正常に動作します。プログラムを Program Files x86 フォルダーに配置すると、xrc フォルダーが見つからないことを示すメッセージが表示されます。
このアプリケーションは、Program Files の XP マシン、Vista マシン、および Program Files の Win7 マシンで問題なく動作します。

他に興味深いのは、Program Files (x86) フォルダー内の exe をダブルクリックすると正常に実行されますが、スタート/プログラム メニューに追加されたショートカットから実行しようとすると正しく実行されないことです。ここで、プログラムが xrc フォルダーを見つけられないことを示すエラー メッセージが表示されます。また、プログラムをデスクトップ上のフォルダーに移動し、ルートおよび他のすべての場所で、プログラムが起動して正常に実行されました。したがって、xrc フォルダーを指すコードは問題ないと確信しています。

では、質問に戻ります。プログラムが x86 フォルダーから実行されている場合、パス参照がおかしくなるようなことが起こっていますか? さらに重要なことは、それは修正可能ですか?

最後に 1 つ - 問題が xrc フォルダーへのパスに関連していることを可能な限り確認するために、アプリケーションの 2 つのインスタンスから xrc フォルダーを削除しましたが、プログラムが x86 にインストールされたときに受け取ったのと同じエラー メッセージが表示されます。フォルダ。

明確にするために、プログラムが実行されないのは、スタート メニューのショートカットを使用し、exe を使用し、すべてのパーツが Program Files (x86) フォルダーに保存されている場合のみです。

Plasticsabers answer は、問題を理解するのに本当に役立ち、修正することができました。これは Vista と XP の問題ではなく、32 ビット OS と 64 ビットの問題です。

64 ビット XP と 32 ビット Win7 で実行する必要があります。

4

1 に答える 1

0

このメモによると、Program Files(x86)フォルダーは、64ビットプログラムを対象としたProgram Filesフォルダーとは対照的に、32ビットプログラムファイルを対象としています。

ただし、32ビットプログラムが32ビットマシン上にあるように見せかけるには、作業ディレクトリの名前を「プログラムファイル」として返す必要があります。これは、32ビットマシン上での名前であるためです。これは、getcwd()を使用してWindowsに作業ディレクトリを要求したときに表示されるものです。プログラムはパスでそのディレクトリ名を使用しようとしていますが、実際には実際の64ビットマシン上のファイルへのパスではないため、壊れます。

WOW64のドキュメントを見ると、スタートメニューから起動したときにのみ壊れてしまうのは、64ビットプロセスが32ビットプロセスを作成しているため、システムがProgramFiles環境変数を変更しているためだと思います。ダブルクリックして起動する場合は、最初から32ビットのプロセスです。

これに遭遇したのはあなただけではないようです。このWindowsAPIは、説明している問題を回避するように特別に設計されているようです。他に何もなければ、それはあなたが見ている振る舞いが仕様によるものであることを示唆しています。

しかし、これは学術的です。この種のことから身を守るために、私はあなたのexeへの絶対パスを、のようなものを使用して取得し、os.path.realpath(__file__)そこから移動します。

于 2011-07-27T21:31:07.040 に答える