Доцент
Участник
Offline
|
|
« : 14-10-2009 18:17 » |
|
Подскажите, кто знает, как сделать, чтобы запущенная программа удалила сама себя с диска, не попадая в корзину?
|
|
« Последнее редактирование: 15-10-2009 04:57 от Sel »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 15-10-2009 03:15 » |
|
Доцент, хм, обычно, если удаляю что то программно, то оно как раз в корзину точно не попадает Это где у тебя такая проблема вылезла ?
|
|
|
Записан
|
|
|
|
Доцент
Участник
Offline
|
|
« Ответ #2 : 15-10-2009 13:17 » |
|
проблема не большая. просто после однократного выполнения проги ее нужно удалить. без запроса пользователя. давненько я это где-то видел, но вот где и как что-то позабылось.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #3 : 15-10-2009 13:38 » |
|
Запущеная прога не может сама себя удалить. Она может только кому-нить сказать, чтобы её удалили после завершения работы. Самый простой способ сказать это батнику, который после этого удалит и себя. Если не вру, такой способ уже рассматривался на форуме. А что говорит в таких случах поиск?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Доцент
Участник
Offline
|
|
« Ответ #4 : 15-10-2009 16:12 » |
|
поиск молчит, но я искал так .. поверхностно.на если не ошибаюсь способ все таки должен быть.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 16-10-2009 02:55 » |
|
решения , по крайней мере, два:
1) создать на диске вспомогательный файл (bat ли, exe ли), который только и сделает, что удалит программу. Запустить этот модуль как новый процесс. Завершить свою работу. Новый процесс пытается удалить программу, пока не сможет, затем тоже завершает работу и остаётся лежать мусором на диске.
2) тоже сейчас не нашёл сразу, но вроде есть такая фишка, что в определённом месте реестра файл можно пометить для удаления при следующей перезагрузке. Можно саму программу пометить, а можно именно тот мусор-хвостик.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #6 : 16-10-2009 04:09 » |
|
1) создать на диске вспомогательный файл (bat ли, exe ли), который только и сделает, что удалит программу. Запустить этот модуль как новый процесс. Завершить свою работу. Новый процесс пытается удалить программу, пока не сможет, затем тоже завершает работу и остаётся лежать мусором на диске.
Также можно не создавая файл на диске тоже самое сделать из памяти процесса. Где то я на форуме выкладывал код. 2) тоже сейчас не нашёл сразу, но вроде есть такая фишка, что в определённом месте реестра файл можно пометить для удаления при следующей перезагрузке. Можно саму программу пометить, а можно именно тот мусор-хвостик. Этот ключик рядом с ключиком автозагрузки: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 16-10-2009 04:54 » |
|
zubr, Также можно не создавая файл на диске тоже самое сделать из памяти процесса. Где то я на форуме выкладывал код
покажи как, хочу ))) А насчёт runonce - может быть, но я вроде что то другое встречал. Но если он так и работает - то подходит
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #8 : 16-10-2009 05:40 » |
|
Соломон и Руссинович. "Внутреннее устройство Windows 2000", глава "Запуск и завершение работы системы", стр. 161. Основной поток Smss выполняет следующие инициализирующие операции. ... 5. Выполняются отложенные действия по переименованию файлов, указанные в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations. Отложенные операции по удалению файлов указываются в подразделе PendingFileRenameOperations2 ...
|
|
« Последнее редактирование: 16-10-2009 05:44 от sss »
|
Записан
|
while (8==8)
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #9 : 16-10-2009 06:33 » |
|
остаётся лежать мусором на диске. Батник (кстати из четырёх строчек кода, проверено) может сам себя удалить. зы Такая тема уже обсуждаласть У НАС НА ФОРУМЕ, искать надо уметь.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
zubr
Гость
|
|
« Ответ #10 : 16-10-2009 06:50 » |
|
Алексей1153++, поищи, я не помню в какой ветке форума я выкладывал код как запускать из ресурса программы исполняемый файл не сохраняя его на диск. Здесь принцип тотже - 1. Создаешь процесс Cmd 2. Ресурс с экзешником загружаешь в память Cmd-процесса 3. Екзешник дожидается закрытия программы и удаляет ее.
Хотя через батник гораздо проще, кстати батник прекрасно удаляет себя, так что никакого мусора не остается.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #11 : 16-10-2009 16:44 » |
|
Вот вариант удаления без батника: procedure TForm1.Button1Click(Sender: TObject); var sinf: TShellExecuteInfo; szModule: String; begin SetString(szModule, PChar(#0), 256); FillChar(szModule[1], 256, #0); GetModuleFileName(0, PChar(szModule), Length(szModule)); GetShortPathName(PChar(szModule), PChar(szModule), 255);
ZeroMemory(@sinf, SizeOf(sinf));
sinf.cbSize := SizeOf(sinf); sinf.lpVerb := 'Open'; sinf.lpFile := PChar('cmd.exe'); sinf.lpParameters := PChar('/c del ' + szModule); sinf.nShow := SW_HIDE; sinf.fMask := SEE_MASK_NOCLOSEPROCESS;
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
ShellExecuteEx(@sinf); SetPriorityClass(sinf.hProcess, IDLE_PRIORITY_CLASS); SetProcessPriorityBoost(sinf.hProcess, True); Application.Terminate; end;
|
|
|
Записан
|
|
|
|
Доцент
Участник
Offline
|
|
« Ответ #12 : 19-10-2009 19:50 » |
|
в бейсеке я далеко не прифофи, поэтому не совсем понятно!? как сделать бантик или как им воспользоваться, хотелось бы увидеть простенький пример с коментариями, а не просто голый код.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #13 : 20-10-2009 06:45 » |
|
Я тоже в басике не прифофи (was auch immer das heisst), но всё на самом деле очень просто.
Делаешь не бантик, а батник = bat-file, например, delete_me.bat. В батнике стоит цикл удаления программы, например Test1.exe, до тех пор пока она существует, после цикла стоит команада удаления самого батника.
В программе Test1.exe, в любом месте где тебе удобно и которое ты знаешь при завершении программы, добавляешь код запуска батника delete_me.bat любым известными или доступным тебе способом.
Всё.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Доцент
Участник
Offline
|
|
« Ответ #14 : 21-10-2009 11:22 » |
|
как создать батник и как должно выглядеть его содержимое? А запускать его как обычный .ехе или нет? извиняюсь за возможно глупые вопросы, но если можно поподробнее.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #15 : 21-10-2009 11:31 » |
|
Батник создаётся в любом доступном текстовом редакторе - под виндой это Блокнот. Можно просто создать текстовый файл, а потом переименовать его в .bat
Содержимое - команды запущеного командного процессора - например команды ДОС или другие исполняемые файлы .com или .exe. Самый яркий пример батника всеобщеизвестный под виндой autoexec.bat
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Доцент
Участник
Offline
|
|
« Ответ #16 : 22-10-2009 18:42 » |
|
под досом не работал лет 10. можешь привести для примера строчку содержащую команду по удалению файла. и еще такой вопрос - этот батник должен находиться в папке с программой или при ее установке его надо куда-то скопировать?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #17 : 22-10-2009 21:48 » |
|
Где угодно может находиться. Состав простой:
del /F /Q путь_и_имя_файла
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Доцент
Участник
Offline
|
|
« Ответ #18 : 23-10-2009 05:33 » |
|
del /F /Q путь_и_имя_файла
извиняюсь, возможно опять глупый вопрос.... досом давненько не занимался и на данный момент литературы ни какой не осталось. F- это что? Q-это что? путь к файлу типа С:\папка\.... имя проги.exe?
а в программе написать строчку: delete_me.bat или прописать путь к этому файлу?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #19 : 23-10-2009 06:21 » |
|
Доцент, в командной строке набери help или del /? Все вопросы сразу отпадут.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #20 : 23-10-2009 06:27 » |
|
под досом не работал лет 10. Ну тогда ты должен это знать лучше меня, я под ним лет 20 не работал. Но меня хорошо учили и самое главное это пользоваться помощью: del /? ps Слав, опять опередил.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Доцент
Участник
Offline
|
|
« Ответ #21 : 23-10-2009 14:58 » |
|
набрал del /?, del /, del выдает ошибку. набрал help ни чего не происходит.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 23-10-2009 15:01 » |
|
C:\Documents and Settings\uz1>del /? Удаление одного или нескольких файлов.
DEL [/P] [/F] [/S] [/Q] [/A[[:]атрибуты]] имена ERASE [/P] [/F] [/S] [/Q] [/A[[:]атрибуты]] имена
имена Имена одного или нескольких файлов. Для удаления сразу нескольких файлов используются подстановочные знаки. Если указан каталог, из него будут удалены все файлы.
/P Запрос на подтверждение перед удалением каждого файла. /F Принудительное удаление файлов, доступных только для чтения. /S Удаление указанных файлов из всех подкаталогов. /Q Отключение запроса на подтверждение при удалении файлов. /A Отбор файлов для удаления по атрибутам. атрибуты S Системные файлы R Доступные только для чтения H Скрытые файлы A Файлы для архивирования Префикс "-" имеет значение НЕ
Изменение команд DEL и ERASE при включении расширенной обработки команд:
Результаты вывода для ключа /S принимают обратный характер, то есть выводятся только имена удаленных файлов, а не файлов, которые не удалось найти.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #23 : 23-10-2009 15:03 » |
|
Доцент, чего? где набрал? cmd запустил? cmd help help del del /?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Доцент
Участник
Offline
|
|
« Ответ #24 : 23-10-2009 15:21 » |
|
ну вот и маленький упущенный нюаньсик в виде cmd. теперь почитаю, спасибо.
|
|
|
Записан
|
|
|
|
|