2013-09-27 274 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:檢查體系結構編譯選項,在調試/釋放選項 –