アプリケーションを実行するときに、psTool ユーティリティを System32 フォルダーにコピーする必要があります。
私は 64 ビット Windows 7 を使用していますが、を介して exe を system32 ビット フォルダーにコピーしようとするとFile.Copy
、exe は常に SysWow64 にコピーされます。
destFile にブレークポイントを設定すると、パスは と表示されますがC:\Windows\System32
、ファイルはそこに移動しません (sysWow64 に移動します)。 を試しましたがSpecial Folder
SystemX86
、ファイルは再び sysWOW64 に移動します。
string sourceFile = "C:\bin\Debug\somexe.exe"
string destFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), utilityName);
File.Copy(sourceFile, destFile, true);
ここで何が欠けているかについて何か提案はありますか?
編集
下記の回答で指摘されているように、ファイル システムのリダイレクトが行われています。64 ビット OS 上のコンソール アプリケーション用に Visual Studio のデフォルト設定でアプリを開発しています。アプリケーションが 32 ビット OS と 64 ビット OS の両方で動作するように、コンパイル時にどの設定/スイッチを保持する必要があるかわかりません。基本的には、 OS のビット数に関係なく、
ファイルをコピーするように設定する必要があります。プログラムの後半では、コマンド ラインから psTools ユーティリティにアクセスする必要がありますが、SysWOW64 に配置すると利用できません。SysWOW64 の 32 ビット cmd.exe を使用するように変更すると、これも 64 ビット プラットフォーム固有のものになり、選択したくありません。System32
問題なく 32 ビットと 64 ビットの両方でアプリを実行できるソリューションはありますか? コードを変更する必要がありますか (どのように?)、またはこのコンソール アプリケーション プロジェクトのいくつかのプロパティを変更する必要がありますか (どのプロパティ)?
ベストアンサー1
あなたは違反したファイルシステムのリダイレクト。
は 64 ビット アプリケーション専用に予約されているため%windir%\System32
、64 ビット バージョンの Windows では、ディレクトリにアクセスしようとする 32 ビット アプリケーションは、%windir%\System32
自動的に透過的に 32 ビット%windir%\SysWOW64
ディレクトリにリダイレクトされます。
まず、プログラムが実際には64ビットシステムフォルダに属しますWindows がこの自動リダイレクトを実行するのには理由があります。32 ビットのものは、%windir%\System32
64 ビット版の Windows のフォルダーには入りません。。
64 ビット システム ディレクトリにコピーすることが確実な場合は、いくつかのオプションがあります。最も簡単な方法は、ユーティリティを 64 ビット アプリケーションとしてコンパイルすることです。または、 の代わりに を使用して、WOW64 リダイレクタに、何をしているのかわかっているのでリダイレクトを実行しないように指示することもでき%windir%\Sysnative
ます%windir%\System32
。