Visual Studio将非托管的64位DLL复制到SysWOW64,而不是System32



我有一个使用Visual Studio 2010在非托管C++中编写的驱动程序。在64位Windows7上编译DLL时,编译后的步骤是:

echo Copying $(TargetFileName) to the OS's 64-bit system folder ...
xcopy $(TargetPath) $(SystemRoot)System32. /Y /Q

但是,dll被复制到$(SystemRoot)\SysWOW64\中,这应该只发生在32位程序集中。

但是!如果我使用Windows资源管理器或从命令外壳使用xcopy将dll复制到System32,则dll将正确地放置在System32文件夹中。我做错了什么?是因为Visual Studio是一个32位程序,并且POST-BUILD事件是在该32位进程的上下文中运行的吗?

您的脚本是从32位进程运行的。作为一种创可贴解决方案,您应该能够用sysnative替换system32,WOW64层应该做正确的事情。

更新:对不起,也许是这样:%windir%sysnativecmd.exe /C "xcopy ..."

变量SystemRoot是根据调用程序展开的。

由于调用程序(devenv.exe)是一个32位程序,它被替换为SysWOW64。

相关内容

最新更新