use*_*541 1 .net windows winapi
我在x64系统上运行32位应用程序.(Windows 7)我正在尝试运行Windows备份,它位于:c:\ System32\sdclt.exe.因为我作为32位进程运行,所以我必须禁用WOW64重定向(使用Wow64DisableWow64FsRedirection).问题是,在禁用wow64重定向后,我得到"无法找到指定的过程"错误.
我的猜测是,不知何故,当禁用重定向时,sdclt.exe无法加载其所有依赖的dll.
注意:1.只有在我没有使用高级特权的情况下才会发生这种情况.2.我将"使用shell执行"设置为true,因为我想让用户使用我的应用程序而没有提升权限.2.编译为64位时不会发生此错误.
禁用文件重定向是一项不稳定的业务.您正在此处执行此操作,以便您的32位进程能够查看位于的文件system32
.通常,从32位进程对该文件夹的任何引用都将重定向到SysWOW64
.但是,正如您所发现的那样,禁用文件重定向会破坏链中的其他链接.
我知道的最佳解决方案是使用特殊%windir%\sysnative
别名来找到真正的system32目录.不要禁用文件重定向,只需%windir%\sysnative\sdclt.exe
在生成进程时传递.
文件重定向的文档说:
32位应用程序可以通过%windir%\ Sysnative替换%windir%\ System32来访问本机系统目录.WOW64将Sysnative识别为一个特殊别名,用于指示文件系统不应重定向访问.这种机制灵活且易于使用,因此,它是推荐的绕过文件系统重定向的机制.请注意,64位应用程序无法使用Sysnative别名,因为它是虚拟目录而不是真实目录.
Windows Server 2003和Windows XP:从Windows Vista开始添加Sysnative别名.
最终警告实际上意味着%windir%\Sysnative
在XP64上无法识别,除非机器已使用适合%windir%\Sysnative
该操作系统的MS修补程序进行维修.在实践中,这并不重要,因为XP64安装基础非常小.
我所知道的唯一其他解决方案是创建一个64位进程的专用启动器.如果将该启动程序放在不受文件重定向影响的文件夹中,则可以从32位进程调用该启动程序,然后启动程序可以查看64位系统目录.如果你需要支持XP64,我认为你必须使用这种方法.
归档时间: |
|
查看次数: |
1719 次 |
最近记录: |