从vc ++运行批处理文件

时间:2013-09-27 06:51:00

标签: visual-c++ batch-file

我正在尝试使用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,谢谢。

2 个答案:

答案 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)

检查两个重要方面:

  • 您的应用程序是32位还是64位进程?
  • 当前目录

另外,请确保您可能需要注释掉REM标记的行,处理环境变量等。