在32位应用程序中,我必须将文件复制到64位系统文件夹
(C:\Windows\System32\
代替C:\Windows\SysWOW64\
)
为此,我尝试使用带参数SHGetKnownFolderPath
的WinAPI函数FOLDERID_ProgramFilesX64获取文件夹(GUID:6D809377-6AF0-444b-8957-A3773F02200E)。
但不幸的是,这是不允许的(如备注部分所述),并且正确的功能结果是找不到文件'。
有没有办法实现这个目标?
答案 0 :(得分:4)
您正在请求 PROGRAM FILES 文件夹,而不是 SYSTEM 文件夹。请改为FOLDERID_System
和FOLDERID_SystemX86
。
或者,使用FOLDERID_Windows
获取Windows安装文件夹,然后将特殊的SysNative
别名附加到其末尾,让文件系统重定向器为您找到实际的文件夹,按照{ {3}}:
32位应用程序可以通过将%windir%\ Sysnative 替换为%windir%\ System32来访问本机系统目录。 WOW64将Sysnative识别为一个特殊的别名,用于指示文件系统不应重定向访问。此机制灵活且易于使用,因此,是推荐的绕过文件系统的机制重定向。请注意,64位应用程序无法使用Sysnative别名,因为它是虚拟目录而不是真实目录。
答案 1 :(得分:2)
我很困惑为什么当你说你想要System32文件夹时你会尝试FOLDERID_ProgramFilesX64
,因为前者会(如果有效)给你 Program Files 文件夹。对于 System32 文件夹,您需要GetSystemDirectory
功能。
您可以使用引人注目的Wow64DisableWow64FsRedirection
函数来禁用WOW64重定向,这允许您的32位应用程序实际访问64位系统文件夹。然后使用Wow64RevertWow64FsRedirection
在完成后恢复重定向。
另请注意,实际上并不建议将您自己的文件存储在System文件夹中(并且已经很长时间了),正如GetSystemDirectory
文档中的这条说明所示:
应用程序不应在系统目录中创建文件。如果 用户正在运行操作系统的共享版本 应用程序没有对系统目录的写访问权。