запуск исполняемого файла Windows через пакетный скрипт, exe не в Program Files - PullRequest
9 голосов
/ 09 марта 2010

Вероятно, это пакетный сценарий 101, но я не могу найти чёткого объяснения / документации о том, почему это происходит или если мой обходной путь действительно является решением. Так что в принципе любая терминология или ссылки на хорошие источники приветствуются.

Итак, у меня есть программа, которую я хочу выполнить с помощью пакетного скрипта (вместе с несколькими другими программами). Это единственный файл, в котором exe не находится в папке Program Files. Я могу начать это так:

C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe

Но я получаю сообщение об ошибке:

Run-time Error '3024':

Could not find file
C:\Users\MyUserName\Desktop\ModuleSettings.mdb

Похоже, что программа ищет файлы настроек в том же месте, где запускается пакетный скрипт. Учитывая, что я наконец-то получил все для работы, сделав следующее:

cd C:\WeirdProgram\WeirdProgramModule\
weirdmodule.exe

Это прекрасно работает, и это не конец света, чтобы идти этим путем (только одна дополнительная линия), но я убедил себя, что я делаю что-то не так, основываясь на отсутствии базового понимания.

Кто-нибудь знает или может указать мне, почему это работает таким образом?

О, и делает следующее:

start "C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe"

вообще ничего не делает.

Спасибо

Ответы [ 2 ]

17 голосов
/ 09 марта 2010

вы делаете это прекрасно: -)

исполняемый файл, вероятно, ищет этот файл в "текущем рабочем каталоге", который устанавливается, когда вы "cd" обращаетесь к нему ранее.

вы можете установить свой рабочий каталог вручную, создав ярлык для вашего командного файла; щелкните правой кнопкой мыши; свойства.

редактирование:

вы также можете установить свой текущий рабочий каталог с помощью команды start:

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe"

редактирование:

Если вы хотите передать параметры, просто добавьте их в исполняемое имя файла, как в обычном ярлыке:

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe" "param1 param2"

или

start "Title" /D "C:\WeirdProgram\WeirdProgramModule\" "weirdmodule.exe param1 param2"

Для справки синтаксис описан здесь: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds.mspx?mfr=true.

5 голосов
/ 09 марта 2010

Что происходит, weirdmodule.exe ищет в "текущем каталоге" файл .mdb. Вы можете указать ему, где найти файл .mdb, с помощью параметра командной строки или с помощью другого метода настройки (возможно, реестра или INI-файла). То, как вы указали бы местоположение, полностью зависит от программы weirdmodule.exe.

Кроме этого, ваш текущий обходной путь, вероятно, то, что вы застряли.

Что касается вашей проблемы с использованием start.exe ... программа start.exe имеет очень, очень странное поведение (причудливое поведение, на мой взгляд), рассматривая первый параметр как «заголовок» для вставки в окно если (и только если) первый параметр в кавычках. Итак, у вас есть несколько вариантов:

  • Не используйте кавычки для указания программы. Это работает для вас, потому что вам не нужны кавычки (в пути нет пробелов или других специальных символов, которые бы требовали его заключать в кавычки):

    start C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe
    
  • В качестве первого параметра укажите пустой (или некоторую другую строку) заголовок. Это то, что вам нужно сделать, если ваш путь требует кавычек:

    start "" "C:\WeirdProgram\WeirdProgramModule\weirdmodule.exe"
    
...