Как получить 64-битную системную папку в 32-битном приложении?
В 32-битном приложении я должен скопировать файл в 64-битную системную папку
(C:\Windows\System32\
вместо C:\Windows\SysWOW64\
)
Для этого я попытался получить папку с помощью функции WinAPI SHGetKnownFolderPath
с параметром FOLDERID_ProgramFilesX64 (GUID: 6D809377-6AF0-444b-8957-A3773F02200E).
Но, к сожалению, это недопустимо (как упоминалось в разделе замечаний), и результат функции правильно - "файл не найден".
Есть ли способ сделать это?
2 ответа
Вы запрашиваете папку PROGRAM FILES, а не папку SYSTEM. смотреть на FOLDERID_System
а также FOLDERID_SystemX86
вместо.
В качестве альтернативы используйте FOLDERID_Windows
чтобы получить папку установки Windows, а затем добавить специальный SysNative
псевдоним до конца, пусть перенаправитель файловой системы определит местонахождение фактической папки для вас, согласно документации:
32-разрядные приложения могут получить доступ к собственному системному каталогу, заменив %windir%\Sysnative на% windir% \ System32. WOW64 распознает Sysnative как специальный псевдоним, используемый для указания того, что файловая система не должна перенаправлять доступ. Этот механизм является гибким и простым в использовании, поэтому он является рекомендуемым механизмом для обхода перенаправления файловой системы. Обратите внимание, что 64-разрядные приложения не могут использовать псевдоним Sysnative, поскольку это виртуальный каталог, а не реальный.
Я запутался, почему вы пытаетесь FOLDERID_ProgramFilesX64
когда вы говорите, что хотите папку System32, так как первая из них (если она работает) даст вам папку Program Files. Для папки System32 вы хотите GetSystemDirectory
функция.
Вы можете использовать ловко названный Wow64DisableWow64FsRedirection
функция отключения перенаправления WOW64, которая позволяет вашему 32-разрядному приложению фактически получить доступ к 64-разрядной системной папке. Тогда используйте Wow64RevertWow64FsRedirection
восстановить перенаправление, как только вы закончите.
Также обратите внимание, что на самом деле не рекомендуется хранить ваши собственные файлы в системной папке больше (и не было в течение достаточно долгого времени), так как это примечание в документации для GetSystemDirectory
говорит:
Приложения не должны создавать файлы в системном каталоге. Если пользователь работает с общей версией операционной системы, приложение не имеет права на запись в системный каталог.