Вопрос: Альтернатива Shell | Добавлено: 28.11.06 15:49 |
Автор вопроса: ![]() |
При использовании команды Shell из программы 1 для запуска програмы 2 программа 2 запускается как дочерний процесс и закрывается при закрытии программы 1.
Сам вопрос: Как запустить программу 2 из программы 1, чтобы при закрытии программы 1, программа 2 оставалась работать? |
Ответы | Всего ответов: 17 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 185 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 28.11.06 16:30 |
У меня получилось так:
n = Shell("cmd /C C:\WINDOWS\system32\notepad.exe", vbHide)
|
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 36 |
Профиль | Цитата | #2 | Добавлено: 28.11.06 18:58 |
Запускает, но генерирует ошибку в моей проге. Если прогу запускаю сам, то все путем, если это делает bat файл со строкой cmd /C C:\WINDOWS\system32\notepad.exe
то вылезает ошибка bad file name or number. Тоже самое и из приложения с указанным выше кодом. Причем с блокнотом все проходит нормально, а с моей прогой ошибка. Еще раз подчеркиваю, что если запускать мою прогу вручную, то все путем. |
Номер ответа: 3 Автор ответа: ![]() ![]() Вопросов: 55 Ответов: 1008 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 28.11.06 20:25 |
то вылезает ошибка bad file name or number. Может у тебя несколько прог с одним и тем же именем?
|
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 36 |
Профиль | Цитата | #4 | Добавлено: 28.11.06 20:49 |
Может у тебя несколько прог с одним и тем же именем?
Нет. У меня Process Explorer все видит и копий точно нет. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 185 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 28.11.06 21:11 |
А в пути до exe-файла проги есть пробелы? |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 36 |
Профиль | Цитата | #6 | Добавлено: 29.11.06 09:11 |
А в пути до exe-файла проги есть пробелы?
Нет. Прога в System32. |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 185 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 29.11.06 09:53 |
Запускает, но генерирует ошибку в моей проге. Если прогу запускаю сам, то все путем, если это делает bat файл со строкой
cmd /C C:\WINDOWS\system32\notepad.exe то вылезает ошибка bad file name or number. Вообще-то, довольно подозрительно то, что программа запускается, но в ней генерируется какая-то ошибка, как здесь сказано... Может проблема решится, если перед запуском shell сделать ChDir на каталог, который указан, как "рабочий" для Вашей программы. (Я не знаю, о какой программе идет речь на самом деле и как именно Вы запускаете ее "вручную", поэтому просто пытаюсь гадать.) Я имею в виду, что для обычных Windows программ, если они обычно запускаются кликом на ярлык, то в настройках ярлыка есть указание не только пути до файла программы, но и "Рабочий каталог", который устанавливается текущим для сеанса работы этой программы. Очевидно наш shell такое переключение на рабочий каталог не делает, а запускает прогу так, что для нее рабочим является текущий каталог сеанса работы вызывающей программы. Может быть именно поэтому и bad file name, т.к. в текущем каталоге нет тех файлов, которые есть в рабочем каталоге вызываемой программы и которые должные открываться при ее вызове. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 36 |
Профиль | Цитата | #8 | Добавлено: 29.11.06 10:10 |
Прога написана мной и я знаю, что она автономна - она не требует подгрузки каких-то модулей. Никаких файлов для ее работы из моего рабочего каталога не требуется.
Я опишу поподробней. Прога лежит в System32. Кликаю по ней и она очень хорошо запускается и нормально работает. Далее убиваю ее. Запускаю bat файл со строкой (он лежит на рабочем столе) cmd /C C:\WINDOWS\system32\proga.exe
Вылезает ошибка bad file name o number. В чем тут дело ума не приложу. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 185 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 29.11.06 10:31 |
Что происходит, если в bat файле есть одна такая строка?:
C:\WINDOWS\system32\proga.exe И что происходит, если в bat файле стоит такая строка?: cmd /K C:\WINDOWS\system32\proga.exe (кстати, уже все выглядит так, что проблема не с shell, а именно с вызовом Вашей программой. Так что может быть нужно обращаться с вопросом не на форум VBA, а куда-нибудь в OS Windows или по компиляторам.) |
Номер ответа: 10 Автор ответа: ![]() ![]() ICQ: 237822510 Вопросов: 28 Ответов: 1182 |
Профиль | Цитата | #10 | Добавлено: 29.11.06 10:34 |
Напиши ватник примерно так.
c: cd windows cd system32 proga.exe Как тебе уже в общем то говорили. |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 36 |
Профиль | Цитата | #11 | Добавлено: 29.11.06 10:45 |
Что происходит, если в bat файле есть одна такая строка?:
C:\WINDOWS\system32\proga.exe И что происходит, если в bat файле стоит такая строка?: cmd /K C:\WINDOWS\system32\proga.exe И в первом и во втором случае ситуация одна и та же - bad file name or number Напиши ватник примерно так.
c: cd windows cd system32 proga.exe И здесь то же самое. Да проблема действительно в проге, а не в шелле. Может быть все-таки кто-то знает. |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 185 |
Web-сайт: Профиль | Цитата | #12 | Добавлено: 29.11.06 12:28 |
Мне кажется, что у меня остался самый последний вопрос. Если будет безрезультатно, то больше идей не будет, и Вам придется искать решение в самой Вашей проге.
Касательно успешного запуска. Как именно происходит успешный запуск? Кликом на ярлыке? Кликом на имени самого exe-файла? В любом случае, нужно смотреть параметры запуска, которые доступны по <Alt+Enter>. Может быть установлены параметры совместимости (я не уверен, но может быть они тоже как-нибудь пропускаются по shell и в коммандном режиме). Нет ли в каталоге system32 еще каких-нибудь файлов, которые может быть появились сами и могут относиться к proga.exe, например: proga.ini, proga.inf, proga.lnk и т.п.? |
Номер ответа: 13 Автор ответа: ![]() ![]() ICQ: 237822510 Вопросов: 28 Ответов: 1182 |
Профиль | Цитата | #13 | Добавлено: 29.11.06 13:28 |
Ну про *.lnk ты загнул, а вот то что твоя прога может использовать какой то файл (читать или пытаться писать) это вполне возможно. Кстати что прога то делает, куда то телепаты подевались.![]() |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 8 Ответов: 36 |
Профиль | Цитата | #14 | Добавлено: 29.11.06 13:28 |
Спасибо за столь обстоятельное обсуждение.
Успешный запуск происходит в случаях: 1) При клике на самой проге в system32. 2) При клике на Ярлыке (Ярлык на рабочем столе был создан перетаскиванием иконки проги с удерживанием Shift+Ctrl - обычный ярлык) 3) При клике на том же ярлыке, при том, что я удалил строку в ярлыке "Рабочая папка". Т.е. в ярлыке остался только путь к моей проге. Никаких посторонних прог нет. |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 185 |
Web-сайт: Профиль | Цитата | #15 | Добавлено: 29.11.06 13:58 |
Ну, если (это уж самое самое последнее) Вы уверены, что в указываемом Вами пути и имени программы при ее вызове по shell и в bat не затесалась какая-нибудь буква кириллицы, единтичная по написанию с латинской буквой, то...
- определенно ищите проблему в самой Вашей программе (если она не открывает/не читает файлы, то может быть она обращается к устройствам или другим программам/процессам, номеров/адресов которых не может обнаружить по каким-то причинам, неведомым мне лично) - попробуйте скопировать Вашу программу в другой каталог и посмотрите, запустится ли она оттуда (судя по тому, что Вы о ней говорите, то она должна работать из любого места) - ну, и (чем чёрт не шутит!), стоит попробовать прописать параметр PATH в AUTOEXEC или CONFIG. На этом я завязываю писать в этой теме. |
|