![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| kruchinin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 19.4.2003 Репутация: нет Всего: нет |
Ситуация:
Программа завершает свою работу, и если в ней произошли какие-то определенные действия, то она удаляет саму себя. Как это сделать? |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
на ходу клипай бат файл в котором делай задержку, потом из своей проги вызывай его, и сразу закрывай прогу, пока будет идти задержка, твоя прога закроется и потом удалиться
Недостаток, останется бат файл -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Можно стереть его во время следующего запуска Windows, добавив ключ RunOnce:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce Пример (извините он на дельфи надеюсь переделаете): uses Registry; procedure TForm1.Button1Click(Sender: TObject); var reg: TRegistry; begin reg := TRegistry.Create; with reg do begin RootKey := HKEY_LOCAL_MACHINE; LazyWrite := false; OpenKey('Software\Microsoft\Windows\CurrentVersion\RunOnce', false); WriteString('Delete Me!','command.com /c del FILENAME.EXT'); CloseKey; free; end; end; --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
А вы что, не знаете, что батник может удалять сам себя? |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
acp даже так, так это вооще круто
можно еще в автозагрузку команду на удаление пихнуть -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Маньяки |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
команда из указанного мною ключа реестра будет выполнена только раз при следующем старте виндозы и потом виндоза сама эту команду из реестра вырежет... это как раз то что вы в батничке в автозагрузке собрались прописывать хотя если результат тот же то какая по сути разница? хотя... кстати учтите что место расположения папки автозагрузки может очень даже сильно меняться особенно при использовании профилей... --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
определенно маньяки.
я писал .com файл в ресурс - потом извлекал его, запускал. Тоже что и батник, только окна не мелькают -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
то же скажете маньяки да вы нас ночью не видели... Теперь серьезно... что будет если твой com файл во время исполнения повиснет кто его удалит? Одной из причин по которой может потребоваться грохать программу на компе, это несовместимость с аппаратурой... а это как раз тот случай когда она может повиснуть... так что все зависит от того что в данной реализации будет важнее: быстрое удаление или надежное удаление --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
как это - повиснет? Там только один цикл (можно не бесконечный) в к-м удаляется exe Файл...
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Я не много не в курсе: можно создать процесс без экзешника?
Тогда этот второй процесс может удалить файл, когда он более не понадобится. |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Читай тему "Программа выполнит определенные действия" и в случае если результат автора не радует программа удалит себя я и не говорил что повиснет твой com файл... я имею в виду возможность того что "определенные действия" приведут к зависанию и до твоей функции самоуничтожения (кстати не такой простой в своем исполнении) программа просто не дойдет... в моем варианте программа просто пропишет строчку в реестр и выполняет свои действия... если что не так она либо виснет либо благополучно завершается но пользователь в любом случае уверен что при следующей загрузке компа он файл уже не увидит А если программа после выполнения действий решила остаться на компе она просто удаляет строчку из реестра... Кстати твой способ мне тоже нравится, но кажется с бат файлом проще, и разве нельзя бат файл запустить в свернутом окне? Теперь по поводу вопроса Я не много не в курсе: можно создать процесс без экзешника? насколько я в курсе все процессы привязываются к своему приложению и пока они выполняются программу грохнуть нельзя... хотя кажется где-то видел примерчик программы которая грохала себя используя что то вроде этого примера удаления непустой папки SHFILEOPSTRUCT sh; sh.hwnd=Form1->Handle; sh.wFunc = FO_DELETE; sh.pFrom = "c:\\test\0"; sh.pTo = "NULL"; sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT; sh.hNameMappings = 0; sh.lpszProgressTitle = NULL; SHFileOperation (&sh); ForceDirectories("C:\\Test"); Это сообщение отредактировал(а) HexoGenus - 5.5.2003, 13:38 --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Не так давно (хотя нет, давно) я прочитал на delphimasters.ru, что в принципе грохнуть запущенный файл можно, надо только закрыть memory-mapped хендл этого файла, который windows автоматически создает при запуске программы (во всяком случае в Win98/NT).
-------------------- Волны гасят ветер... |
|||
|
||||
| Leonid |
|
||||
|
Прохожий Профиль Группа: Участник Сообщений: 2 Регистрация: 5.4.2003 Репутация: нет Всего: нет |
Может быть я ошибаюсь, но мне кажется, что если "определенные действия" приведут к зависанию, значит программа не выполнила свою задачу и, следовательно, не должна самоуничтожиться. По этому я предлагаю такой вариант:
Я создал проект на базе диалога(просто для проверки) и поместил эту функцию в обработчик кнопки "ОК". Всё сработало замечательно. Наслаждайтесь. Желаю удачи. |
||||
|
|||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Или она просто не может выполнить свою задачу на данном компьютере и следовательно должна самоуничтожиться --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |