在禁用wow64redirect之后,“找不到指定的程序”

我在64位系统上运行32位应用程序(Windows 7)我试图运行Windows备份位于:c:\ System32 \ sdclt.exe。 因为我作为一个32位进程运行,我必须禁用WOW64redirect(使用Wow64DisableWow64FsRedirection)。 问题是,禁用wow64redirect后,我得到“无法find指定的过程”错误。

我的猜测是,在禁用redirect时,sdclt.exe无法加载所有依赖的dll。

注意:1.这种情况只发生在我没有提高特权的情况下。 2.我设置“使用shell执行”为true,因为我想让用户使用我的应用程序没有提高priviliges。 2.编译为64位时不会发生此错误。

Solutions Collecting From Web of "在禁用wow64redirect之后,“找不到指定的程序”"

禁用文件重定向是一项不稳定的业务。 你在这里做的是为了让你的32位进程能够看到位于system32的文件。 通常,从32位进程到该文件夹​​的任何引用都将被重定向到SysWOW64 。 但是,正如您发现的那样,禁用文件重定向会破坏链中的其他链接。

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

文件重定向的文档说:

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

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

最后的警告实际上意味着%windir%\Sysnative%windir%\Sysnative上无法识别,除非机器已经使用了适用于该操作系统的%windir%\Sysnative的MS修补程序。 实际上,这并不重要,因为XP64的安装基础很小。

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

我有一个类似的问题。 我注意到问题只发生在未安装SP1的Windows 7 x64系统上。 在发生问题的系统上,升级到SP1修复了它。