2013-09-27 279 views
0

我试图用ShellExecute运行一个批处理文件,将文件复制到C:\Windows\System32...从VC++,这就是我的批处理文件运行运行批处理文件

xcopy /S/E "source" "C:\Windows\System32\test.dll" /y 

的问题是,当我运行由VC++这个批处理文件,它会被复制到C:\Windows\SysWOW64,但是当我双击该批处理文件,将它复制到我要C:\Windows\System32...

我应该怎么做,使之从VC++,得益于复制到System32

回答

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") 
+0

右侧的VS中,但是从vc运行时它不工作。这是我如何写.. _system(“cmd/c xcopy \”source \“\”C:\ Windows \ System32 \ test.dll * \“/ y”); _ – Terrence

+0

如果您使用system() 'system(“xcopy \”source \“\”C:\ Windows \ System32 \ test.dll * \“/ y”);'就够了。否则,你应该运行'system(“cmd.exe/c xcopy \”source \“\”C:\ Windows \ System32 \ test.dll * \“/ y”);' –

+0

我已经试过了,试着运行32位和64位cmd。但它只会复制到SysWow64 ... – Terrence

0

检查两个重要方面:

  • 是你的应用程序在32位或64位进程?
  • 当前目录

还要确保您可能需要注释掉REM标线,过程中的环境变量等

+0

谢谢,但如何检查我的应用程序是否是32/64位? 这些目录是没有问题的。 – Terrence

+0

只有像这样的重定向才能运行32位程序。 @Terrence:检查体系结构编译选项,在调试/释放选项 –