禁用wow64重定向后,“无法找到指定的过程”

时间:2012-02-27 14:40:53

标签: .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位时不会发生此错误。

2 个答案:

答案 0 :(得分:5)

禁用文件重定向是一项不稳定的业务。您正在此处执行此操作,以便您的32位进程能够查看system32中的文件。通常,对32位进程中该文件夹的任何引用都将重定向到SysWOW64。但是,正如您所发现的那样,禁用文件重定向会破坏链中的其他链接。

我知道的最佳解决方案是使用特殊的%windir%\sysnative别名来找到真正的system32目录。不要禁用文件重定向,只需在生成进程时传递%windir%\sysnative\sdclt.exe

文件重定向的documentation表示:

  

32位应用程序可以通过将%windir%\ Sysnative替换为%windir%\ System32来访问本机系统目录。 WOW64将Sysnative识别为一个特殊别名,用于指示文件系统不应重定向访问。此机制灵活且易于使用,因此,它是推荐的绕过文件系统重定向的机制。请注意,64位应用程序不能使用Sysnative别名,因为它是虚拟目录而不是真实目录。

     

Windows Server 2003和Windows XP :从Windows Vista开始添加Sysnative别名。

最终警告实际上意味着在XP64上无法识别%windir%\Sysnative,除非机器已经使用向该操作系统后退%windir%\Sysnative的MS修补程序进行了服务。在实践中,这并不重要,因为XP64安装基础非常小。

我所知道的唯一其他解决方案是创建一个64位进程的专用启动器。如果将该启动程序放在不受文件重定向影响的文件夹中,则可以从32位进程调用该启动程序,然后启动程序可以查看64位系统目录。如果你需要支持XP64,我认为你必须使用这种方法。

答案 1 :(得分:0)

我有类似的问题。我注意到只在没有安装SP1的Windows 7 x64系统上出现问题。在出现问题的系统上,升级到SP1会修复它。