4

OpenFileDialogディレクトリ内のすべてのファイルを表示できないことに気付きました。これは私のアプリケーションで発生しますが、タスクマネージャーの「新しいタスク」「参照」オプション(コントロールを使用する)などの他のOpenFileDialogWindowsネイティブプログラムでも発生しますが、理由と可能な回避策を知っている人はいますか?そのために?
タスクマネージャーを管理者として実行しても修正されなかったため、特権が原因ではないようです

編集:これは、ファイルシステムリダイレクターと呼ばれるappcompat機能によって引き起こされたことがわかりました。どうやら、タスクマネージャー32ビットと自分のアプリケーションを起動していたため、32ビットsystem32別名SysWOW64フォルダーが表示されていました(Windowsでの奇妙な命名スキームについて話してください) 7 64 ビット System32 には 64 ビット ファイルがあり、SysWOW64 には 32 ビット ファイルが保持されます)、特定のアプリケーションの 32 ビット ビルドを実行している場合、64 ビット System32 フォルダーにまったくアクセスできないようですOpenFileDialog

例として、ここに見られるように、SnippingTool.exe がありません (ただし、これに限定されません)。

タスクマネージャー OpenFileDialog ターゲットの場所に存在することは確かですが、
ウィンドウズ・エクスプローラ

4

1 に答える 1

6

これは、64 ビット バージョンの Windows でコードを実行したときに発生します。ナビゲーション バーには、c:\windows\system32 を見ていることが示されています。しかし、実際には c:\windows\syswow64 の内容が表示されます。c:\program files に移動すると、同じことが起こります。実際には c:\program files (x86) の内容が表示されます。SnippingTool.exe の 32 ビット バージョンがないため、リストに含まれていません。

これは、 「ファイル システム リダイレクト」と呼ばれる appcompat 機能です。32 ビット プログラムが 64 ビット オペレーティング システムで生き残るための戦闘チャンスを与えるように設計されています。

プログラムを 64 ビット プロセスとして実行できるようにすることで、これをオフにします。EXE プロジェクト、[プロパティ]、[ビルド] タブを右クリックします。プラットフォーム ターゲット設定を AnyCPU に変更します。VS2012 以降では、[32 ビットを優先] オプションのチェックを外します。

于 2013-08-24T18:50:11.270 に答える