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

时间:2012-07-26 17:41:02

标签: c++ visual-studio-2010 windows-7 32bit-64bit unmanaged

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

更新:抱歉,也许这样:%windir%\sysnative\cmd.exe /C "xcopy ..."

答案 1 :(得分:0)

变量SystemRoot对应于调用程序进行扩展。

由于调用程序(devenv.exe)是32位程序,因此它将替换为SysWOW64。