我正在尝试使用C:\Windows\System32...
来运行批处理文件,从VC ++将文件复制到ShellExecute
,这就是我的批处理文件运行的原因
xcopy /S/E "source" "C:\Windows\System32\test.dll" /y
问题是当我从VC ++运行这个批处理文件时,它将被复制到C:\Windows\SysWOW64
,但是当我双击批处理文件时,它会复制到我想要的地方C:\Windows\System32...
< / p>
我应该怎么做才能从VC ++复制到System32
,谢谢。
答案 0 :(得分:1)
那是因为file system redirector。如果将程序编译为32位,那么* .bat文件将以32位运行。但是,当您双击它时,将运行64位cmd.exe,这使您看到结果。
如果您不需要支持32位平台,可以将程序编译为64位。如果必须将程序编译为32位,则需要禁用MS网站上提到的文件系统重定向,或使用%windir%\ Sysnative
但是不需要像这样运行bat文件,只需从cmd.exe直接运行它。以下命令
cmd /c xcopy /S/E "source" "C:\Windows\System32\test.dll*" /y
将在/ c之后运行命令。确保运行正确的32位或64位版本的cmd
在32位程序中,如果您不想禁用文件系统重定向,则需要使用正确的文件夹运行正确版本的cmd.exe。使用以下命令运行32位cmd.exe
system("cmd.exe /c xcopy /S/E \"source\" \"%windir%\\Sysnative\\test.dll*\" /y")
或以下运行64位cmd
system("%windir%\\Sysnative\\cmd.exe /c xcopy /S/E \"source\" \"%windir%\\System32\\test.dll*\" /y")
最简单的方法是将项目更改为64位并正常运行
system("xcopy /S/E \"source\" \"%windir%\\System32\\test.dll*\" /y")
答案 1 :(得分:0)
检查两个重要方面:
另外,请确保您可能需要注释掉REM
标记的行,处理环境变量等。