1

我有一个使用 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 位程序集上。

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

4

2 回答 2

3

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

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

于 2012-07-26T17:54:23.560 回答
0

变量 SystemRoot 对应调用程序展开。

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

于 2012-07-26T17:53:36.837 回答