2013-09-27 3 views
0

Я пытаюсь копировать файлы C:\Windows\System32... из VC++ с помощью ShellExecute запустить пакетный файл, и это то, что мой пакетный файл запускаетсяЗапустите пакетный файл из VC++

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

Проблема заключается в том, что, когда я работает этот пакетный файл из VC++, то он будет скопирован в C:\Windows\SysWOW64, но когда я дважды щелкните пакетный файл, скопировать туда, где я хочу C:\Windows\System32...

Что я должен сделать, чтобы сделать его скопировать в System32 из VC++, спасибо.

ответ

1

Это потому, что file system redirector. Если вы скомпилируете свою программу как 32 бит, тогда этот * .bat-файл будет работать как 32 бит. Но когда вы дважды щелкните по нему, запустится 64-разрядный cmd.exe, из-за чего вы увидите результат таким образом.

Вы можете скомпилировать программу как 64 бит, если вам не нужна поддержка 32-битной платформы. Если вы должны скомпилировать программу как 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

спасибо, но он не работает при запуске с 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-бит. но он будет скопирован только в SysWow64 ... – Terrence

0

Проверить два важных аспекта:

  • Является ли ваше приложение 32-битный или 64-битный процесс?
  • Текущий каталог

обеспечить Также вам может понадобиться закомментировать REM отмеченные линии, процесс переменные среды и т.д.

+0

спасибо, но как проверить, является ли мое приложение 32/64-битным? каталоги не проблема. – Terrence

+0

Только 32-разрядные программы запускаются под перенастройкой. @Terrence: проверить вариант компиляции архитектуры в VS справа от опции debug/release –

Смежные вопросы