2009-06-12 18 views
3

私は別の大陸のWindows XPコンピュータにプログラムを持っています。関連ファイルをダブルクリックして起動すると、ファイルタイプの関連付けに従ってプログラムが実行されるため、ある時点でクラッシュします。関連するファイルをプログラムアイコンにドラッグして起動すると、正常に動作します。アイコンをダブルクリックして関連ファイルをウィンドウにドラッグすると、正常に動作します。Windowsプログラムの呼び出しの違いは何ですか?

サイトの男は、ファイルタイプの関連付けを3重チェックしていることを確認してくれますし、正しいはずです。

アイコンがレジストリと同じ実行可能ファイルを指していると仮定すると、これら2つの異なる方法でプログラムを開始する際に、どのような違いがありますか?

EDIT:コメントに応答して、問題のマシンは日本語で、通常のマシンは米国英語です。

+0

これは、Windowsの別のローカライゼーションでですか(ローカライズされたバージョンでは、「C:\ Program Files」と「C:\ Program」などの標準パス名がドイツ語で異なる場合があります)。地域の設定が同じ地域に設定されている場合は機能しますか? –

答えて

3

可能な違いは、最初の作業ディレクトリです。ファイルを実行可能ファイルにドラッグすると、最初の作業ディレクトリは実行可能ファイルを含むディレクトリに設定されますが、ファイルをダブルクリックすると、ファイルまたは実行可能ファイルの場所に依存しないデフォルト値です。

すべてのケースで一貫性のある動作を得たい場合は、SetCurrentDirectory()を使用して現在の作業ディレクトリを任意の値に設定できます。 GetModuleFileName(NULL, ...)を呼び出して実行可能ファイル名を取り除くか、またはをmain()の中で調べることによって、実行可能ファイルが格納されているディレクトリをお勧めします。

1

ファイルをダブルクリックすると、プログラムが実行され、ダブルクリックしたファイルの名前がコマンドライン引数としてプログラムに渡されます。

ウィンドウにドラッグすると、プログラムはすでに実行されています。

明らかに違いは、プログラムの起動プロセスです。このソフトウェアは社内で書かれていますか?コマンドライン引数にファイルがあるときに、どのように起動を処理し、適切なコードパスが実行されているかを確認してください。

起動時にプログラムコードを確認できない場合や、レジストリをチェックして変更する可能性がある場合は、ファイル名の受け渡し方法があります。通常、ファイルへのパスにスペースを入れて、プログラムを混乱させないようにします。試してみるべきことは、アソシエーションが引数にトークマークを使用していることを確認することです。おそらく、プログラムでは、会話マークを正しく処理していない可能性があります。

関連する問題