![]() |
Модераторы: 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. |