0

私のMFCアプリ内から、私は次のようなことをしています

CFileStatus fs;
if (CFile::GetStatus("MyOtherProg.exe", fs))
  {
  // found the file
  ::ShellExecute(NULL, NULL, "MyOtherProg.exe", NULL, NULL, SW_SHOW);
  }

ただし、静的 CFile::GetStatus で見つかったファイルへのフル パスは、::ShellExecute によって実行されているものではありません (名前は同じですが、別のフォルダーで別のバージョンの "MyOtherProg.exe" を実行しています)。 .

さまざまなフォルダーにさまざまな「MyOtherProg.exe」のセットを使用して、同じ O/S (Win7 64 ビット) のさまざまな PC でこれを試しました。どちらの PC の ShellExecute も、CFile::GetStatus にあるものと同じものを実行しません。ある PC は常にバージョン 3 を実行し、別の PC は常にバージョン 2 を実行します (なぜ一貫性がないのでしょうか?)。

注 1: 2 台の PC で、少なくとも 3 つのバージョンが「インストール」されていますが、PATH にはどれもインストールされていません。文書化されていない機能である場合、デスクトップにショートカットがあるものもあります。

注 2: それらはすべて異なるバージョンの "MyOtherProg.exe" ですが、異なるディレクトリにインストールされています。

注 3: ::ShellExecute を介して最終的に実行されるもののフル パスは、タスク バーの [スタート] メニューの下にある [検索] 編集フィールドに「MyOtherProg.exe」と入力したときに見つかったパスと同じです。しかし、CFile::GetStatus によって検出されたものが同じではないのはなぜですか? また、ある PC ではバージョン 2 であるのに、別の PC ではバージョン 3 である理由は何ですか?

注 4: 両方の PC で、RUN コマンド "MyOtherProg.exe" の結果の検索リストには 1 つのバージョンのみが表示されます (ただし、1 つの PC には 3 つのバージョンがインストールされ、もう 1 つの PC には 4 つの異なるバージョンがインストールされ、5 つ目のバージョンがインストールされています)。 「デバッグ」ビルド)。3 つのバージョンを持つ PC は常にバージョン 2 のみをリストし、5 つのバージョンを持つ PC は常にバージョン 3 のみをリストします。

4

1 に答える 1