我有一个使用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位进程的上下文中运行的吗?
答案 0 :(得分:3)
您的脚本是从32位进程运行的。作为一种创可贴解决方案,您应该能够将system32
替换为sysnative
,并且WOW64层应该做正确的事情。
更新:抱歉,也许这样:%windir%\sysnative\cmd.exe /C "xcopy ..."
答案 1 :(得分:0)
变量SystemRoot对应于调用程序进行扩展。
由于调用程序(devenv.exe)是32位程序,因此它将替换为SysWOW64。