8

多くのボタンを備えた WPF ウィンドウを作成しました。それぞれが異なるプログラムを実行します。たとえば、MS Word を実行するには、次のコマンドを使用しました。

System.Diagnostics.Process.Start("C:\\Program Files (x86)\\Microsoft Office\\Office14\\WINWORD.EXE");

しかし、Windows 7 Snipping Tool を同じ方法で実行しようとすると、機能しません。次のようになるはずでした:

System.Diagnostics.Process.Start("C:\\Windows\\System32\\SnippingTool.exe");

パスは正しいと確信していますが、ファイルが見つからないというメッセージが常に表示されます。なぜこれが起こっているのか知りたいです。

重要: Windows 7 64 ビットを使用しています。

4

3 に答える 3

10

これを使って:

// if the build platform of this app is x86 use C:\windows\sysnative
if(!Environment.Is64BitProcess) 
   System.Diagnostics.Process.Start("C:\\Windows\\sysnative\\SnippingTool.exe");
else
   System.Diagnostics.Process.Start("C:\\Windows\\system32\\SnippingTool.exe");

問題は、ビルド プラットフォーム (x86) と、C:\Windows\System32\64 ビット OS のフォルダーの自動リダイレクトにあります。

基本的に、いくつかの理由から、32 ビット アプリケーションがそれにアクセスしようとすると、vista/windows 7 64 ビット OSC:\Windows\System32\は自動的に というフォルダにリダイレクトされますC:\Windows\SysWOW64\snippingtool.exeしたがって、そのフォルダーに存在しないため、開始できません。

唯一の方法はC:\Windows\sysnative\、リダイレクトを使用してバイパスすることです。

于 2012-07-31T17:46:01.597 に答える
3

私のサイキック デバッガーは、64 ビット バージョンの Windows で 32 ビット プログラムを実行していることを教えてくれました。そのため、%WINDIR%( C:\Windows) への呼び出しは実際には に再ルーティングされていC:\Windows\SysWOW64ます。

環境や Windows のバージョンに応じて移動する可能性のあるディレクトリへのパスをハードコーディングする代わりに、環境変数を使用してください。

于 2012-07-31T17:24:35.677 に答える
2

代わりに環境変数を使用する必要があります。64 ビット システムで実行していて、C:\Windows\System32\リダイレクトされている可能性があります。

于 2012-07-31T17:24:20.857 に答える