|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.09.2018, 11:14 | #1 |
Пользователь
Регистрация: 27.11.2016
Сообщений: 10
|
Ошибка при запуске внешней программы
Добрый день, форумчане!
Не могу понять в чём дело. Сам я любитель в программировании Delphi, на профи не претендую. Сделал копию функции для отладки (вообще взял с просторов интернета). Код:
Если использую первый вариант строки p1, то ломается на CreateProcess(...). (пробовал без двойных кавычек, не помогло) Если использую второй вариант p1 (скопировал RAR.exe в текущую директорию), то запускается и работает. Первый пришедший на ум вариант: UAC. Тогда я запустил скомпилированный файл от имени администратора, но тоже выходила ошибка. Значит UAC ни при чём. Почему так происходит? Обходной вариант нашёл, но хочу понять на будущее почему так происходит. |
19.09.2018, 11:42 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
какая ошибка возникает?
я бы предположил, что проблема в том, что RAR пытается временный файл создать в своём каталоге, что у него, разумеется, не получается. если это так, то попробуйте добавить ключ -w и указать путь к своей папке. ещё попробуйте заменить создание архива, на, например, тестирование архива. |
19.09.2018, 12:08 | #3 |
Пользователь
Регистрация: 27.11.2016
Сообщений: 10
|
Не знаю какая ошибка, в консоли ничего не выводится, просто программа завершает свою работу.
Забыл написать, что пишу консольное приложение, если это важно. При отладке BreakPoint срабатывает ещё останавливается на CreateProcess, на следующем шаге работа программы перекидывается на конец функции. А так как в программе пока только одна функция, то она завершается. При запуске скомпилированного файла предлагает его закрыть, в подробностях ничего информативного. Думаю, что RAR в своей папке ничего не делает, т.к. параметры ".... A D:\qqq.rar D:\net\*.* ...." предполагают архивирование папки D:\net\*.* с созданием архива D:\qqq.rar CMD-файл отрабатывает с этой строкой всё как надо. Поэтому её и скопировал в Delphi. |
19.09.2018, 12:20 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Ключ w есть для папки временных файлов. Можно с ним поиграться
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
19.09.2018, 12:23 | #5 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,527
|
Цитата:
Код:
Цитата:
1. при запуске из командной строки рабочим каталогом будет какая то ТВОЯ папка (та что выводится в приглашении) --> есть право записи 2. при СreateProcess из "твоей" папки рабочим будет опять твоя (та откуда запускаем) --> есть право записи 3. при CreateProcess из ProgramFiles рабочим (ЕСЛИ мы его не задали принудительно, как один из ПАРАМЕТРОВ CreateProcess) будет опять же та откуда запускаем (тот самый Programs Files) --> право записи ???? проверить можешь запустив в командной строке и при этом избрав текущей папкой тот самый Programs Files(команда сd ... если что).
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 19.09.2018 в 12:41. |
||
19.09.2018, 13:04 | #6 |
Старожил
Регистрация: 16.05.2012
Сообщений: 3,211
|
UniqueString Вам в помощь:
Код:
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
|
19.09.2018, 13:29 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
|
19.09.2018, 13:36 | #8 | ||
Старожил
Регистрация: 16.05.2012
Сообщений: 3,211
|
Цитата:
пруф, если нужно: https://www.gunsmoker.ru/2015/01/nev...llExecute.html Конкретная цитата из комментов: Цитата:
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Последний раз редактировалось Sciv; 19.09.2018 в 13:45. |
||
19.09.2018, 14:17 | #9 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
|
22.09.2018, 08:20 | #10 | |
Пользователь
Регистрация: 27.11.2016
Сообщений: 10
|
Цитата:
После экспериментов у меня перестало ломаться после того как я определил первый аргумент в CreateProcess(...) Код:
UniqueString - реально помогло! Видимо я не до конца представляю как работает CreateProcess(...) и какие папки в каких случаях используются, поэтому появлялось необработанное исключение из-за несогласованности прав и папок. (кстати, ключ -w не помог) Всем спасибо за ответы и помощь! Появилась информация для переваривания.. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при запуске программы | SLAUR | Общие вопросы Delphi | 6 | 08.09.2017 11:15 |
Ошибка при запуске программы | lisica198808 | Помощь студентам | 5 | 08.12.2013 23:45 |
Ошибка при запуске программы (C++) | Nonamelol | Помощь студентам | 2 | 28.09.2013 14:01 |
Ошибка при запуске программы | mimit | Общие вопросы Delphi | 5 | 01.11.2012 23:25 |
Ошибка при запуске программы | stakam | Visual C++ | 1 | 18.12.2010 18:19 |