![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#21 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Можно и без батника, проверяя существует ли процесс созданный исходным exe-шником
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#22 |
Пользователь
Регистрация: 07.10.2011
Сообщений: 66
|
![]() |
![]() |
![]() |
![]() |
#23 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]() Цитата:
Только вот делается это существенно сложнее, чем правильная расстановка кавычек ![]() Кратко алгоритм должен выглядеть так (есть два варианта, я предпочитаю первый): 1. Делаем копию своего описателя, указывая, что копия будет наследоваться. 2. Вызываем второй процесс, указывая в командной строке помимо старого имени файла ещё и скопированный описатель. Кроме того, создание процесса нужно делать с наследованием описателей. 3. Второй процесс вызывает функцию ожидания на описатель, переданный параметром. 4. Когда функция вернёт управление - файл можно удалять. 5. Описатель закрываем. Или так: 1. Во втором процессе находим PID родителя. 2. Открываем процесс по PID, получая описатель. Если открытие не удаётся, считаем, что процесс уже завершён. Открывать надо с минимальными правами только на ожидание. 3. Второй процесс вызывает функцию ожидания на полученный описатель. 4. Когда функция вернёт управление - файл можно удалять. 5. Описатель закрываем. Конечно, можно сделать и совсем просто: Код:
Теоретически, можно попробовать анализировать код ошибки и повторять цикл только для определённого значения кода ошибки, но как-то это видится мне ненадёжным. .bat файлы использовать крайне не рекомендую по следующим соображениям: 1. .bat файлы используют OEM кодировку. Что означает, что все строки нужно транслировать или у тебя будут большие проблемы с путями, содержащими русский язык. 2. .bat файлы - это только ANSI. Что означает, что у тебя будут проблемы с любыми путями, содержащими символы вне текущей кодовой страницы. 3. Пункты 1 и 2 можно попробовать обходить, конвертировав пути в короткие имена. Но надо понимать, что эта операция не всегда возможна. Короткие имена часто отсутствуют - особенно на 64-битных системах. Короче, это довольно ненадёжный способ.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
![]() |
![]() |
![]() |
#24 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
![]()
У меня в bat все нормально происходит даже путь и название когда на русском языке. В нем кирилица нормально воспринимается, а мутить сложное для простой програмки не стоит, еще неделю будешь искать решение), потому как 100% универсального решения нет в этом направлении. Я сам пробовал многое и с процессами мутил и отдельно exe создавалось для выгрузки и удаления, все не коректно работало иногда оставался второй exe файл или висло приложение в цикле в общем не всегда был нужный результат, в Viste да и наверное в Win7 вообще будут предупреждения и блокирование да и антивирус ругаться будет на непонятные движения. Попробуй bat что я предложил. Путь выбирай небольшой и имя файла без всяких пробелов тогда все будет в норме. Если программа пишется без Application замени в нем строки содержащие Application.ExeName на ParamStr(0);
Есть еще такой способ узнать имя и путь своего процесса в место Application.ExeName и ParamStr(0). Может пригодиться эта функция Код:
Последний раз редактировалось Aliens_wolfs; 16.02.2012 в 11:34. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
самоудаление | DeDoK | Общие вопросы Delphi | 10 | 31.01.2021 23:26 |
Самоудаление и автозапуск | CyberViper | Общие вопросы Delphi | 1 | 31.05.2010 11:55 |
Перед открытием файла программа должна спрашивать адрес файла | Belii09878 | Помощь студентам | 1 | 07.03.2010 16:37 |
Перезапись файла без путя или определение расположения файла программы | The Best | Общие вопросы Delphi | 4 | 13.07.2009 22:50 |