4

32 ビット アプリケーションでは、ファイルを 64 ビット システム フォルダにコピーする必要があります
(C:\Windows\System32\ではなくC:\Windows\SysWOW64\) 。

このために、SHGetKnownFolderPathパラメーターFOLDERID_ProgramFilesX64 (GUID: 6D809377-6AF0-444b-8957-A3773F02200E) を使用して WinAPI 関数を使用してフォルダーを取得しようとしました。

しかし、残念ながら、これは許可されておらず (備考セクションで述べたように)、関数の結果は正しくは「ファイルが見つかりません」です。

これを達成する方法はありますか?

4

2 に答える 2

5

SYSTEMフォルダーではなく、PROGRAM FILESフォルダーを要求しています。代わりにandを見てください。FOLDERID_SystemFOLDERID_SystemX86

または、 を使用FOLDERID_Windowsして Windows インストール フォルダーを取得し、SysNativeその末尾に特別なエイリアスを追加して、ファイル システム リダイレクターが実際のフォルダーを見つけられるようにします

32 ビット アプリケーションは、%windir%\System32 を %windir %\Sysnativeに置き換えることにより、ネイティブ システム ディレクトリにアクセスできます。WOW64 は、ファイル システムがアクセスをリダイレクトしないことを示すために使用される特別なエイリアスとして Sysnative を認識します。このメカニズムは柔軟で使いやすいため、ファイル システムのリダイレクトをバイパスするために推奨されるメカニズムです。Sysnative エイリアスは実際のディレクトリではなく仮想ディレクトリであるため、64 ビット アプリケーションでは使用できないことに注意してください。

于 2014-09-18T18:34:40.917 に答える
3

System32 フォルダーが必要だと言うのに、なぜ試してみるのか混乱してFOLDERID_ProgramFilesX64います。なぜなら、前者は (機能した場合) Program Filesフォルダーを提供するからです。System32フォルダーの場合、関数が必要ですGetSystemDirectory

わかりやすい名前のWow64DisableWow64FsRedirection関数を使用して、WOW64 リダイレクトを無効にすることができます。これにより、32 ビット アプリが実際に 64 ビット システム フォルダーにアクセスできるようになります。Wow64RevertWow64FsRedirection完了したら、リダイレクトを復元するために使用します。

また、ドキュメントのこのメモにあるように、システムフォルダーに独自のファイルを保存することは実際には推奨されていないことに注意してください (そして、かなり長い間そうではありませんでした) GetSystemDirectory

アプリケーションは、システム ディレクトリにファイルを作成しないでください。ユーザーがオペレーティング システムの共有バージョンを実行している場合、アプリケーションにはシステム ディレクトリへの書き込みアクセス権がありません。

于 2014-09-18T09:46:14.053 に答える