Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление программы  (Прочитано 25797 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Доцент
Участник

ru
Offline Offline

« : 14-10-2009 18:17 » 

Подскажите, кто знает, как сделать, чтобы запущенная программа удалила сама себя с диска, не попадая в корзину?
« Последнее редактирование: 15-10-2009 04:57 от Sel » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 15-10-2009 03:15 » 

Доцент, хм, обычно, если удаляю что то программно, то оно как раз в корзину точно не попадает Улыбаюсь Это где у тебя такая проблема вылезла ?
Записан

Доцент
Участник

ru
Offline Offline

« Ответ #2 : 15-10-2009 13:17 » 

проблема не большая. просто после однократного выполнения проги ее нужно удалить. без запроса пользователя. давненько я это где-то видел, но вот где и как что-то позабылось.
Записан
Джон
просто
Администратор

de
Offline 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."
Доцент
Участник

ru
Offline Offline

« Ответ #4 : 15-10-2009 16:12 » 

поиск молчит, но я искал так .. поверхностно.на если не ошибаюсь способ все таки должен быть.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 16-10-2009 04:54 » 

zubr,
Цитата
Также можно не создавая файл на диске тоже самое сделать из памяти процесса. Где то я на форуме выкладывал код

покажи как, хочу )))

А насчёт runonce - может быть, но я вроде что то другое встречал. Но если он так и работает - то подходит
Записан

sss
Специалист

ru
Offline 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)
Джон
просто
Администратор

de
Offline 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;
Записан
Доцент
Участник

ru
Offline Offline

« Ответ #12 : 19-10-2009 19:50 » 

в бейсеке я далеко не прифофи, поэтому не совсем понятно!? как сделать бантик или как им воспользоваться, хотелось бы увидеть простенький пример с коментариями, а не просто голый код.
Записан
Джон
просто
Администратор

de
Offline 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."
Доцент
Участник

ru
Offline Offline

« Ответ #14 : 21-10-2009 11:22 » 

как создать батник и как должно выглядеть его содержимое? А запускать его как обычный .ехе или нет? извиняюсь за возможно глупые вопросы, но если можно поподробнее.
Записан
Джон
просто
Администратор

de
Offline 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."
Доцент
Участник

ru
Offline Offline

« Ответ #16 : 22-10-2009 18:42 » 

под досом не работал лет 10. можешь привести для примера строчку содержащую команду по удалению файла. и еще такой вопрос - этот батник должен находиться в папке с программой или при ее установке его надо куда-то скопировать?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 22-10-2009 21:48 » 

Где угодно может находиться.
Состав простой:

del /F /Q путь_и_имя_файла
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Доцент
Участник

ru
Offline Offline

« Ответ #18 : 23-10-2009 05:33 » 

del /F /Q путь_и_имя_файла

извиняюсь, возможно опять глупый вопрос....
досом давненько не занимался и на данный момент литературы ни какой не осталось.
F- это что?
Q-это что?
путь к файлу типа С:\папка\....  имя проги.exe?

а в программе написать строчку: delete_me.bat или прописать путь к этому файлу?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 23-10-2009 06:21 » 

Доцент, в командной строке набери help
или del /?
Все вопросы сразу отпадут.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline 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."
Доцент
Участник

ru
Offline Offline

« Ответ #21 : 23-10-2009 14:58 » 

набрал del /?, del /, del  выдает ошибку.
набрал help ни чего не происходит.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #23 : 23-10-2009 15:03 » 

Доцент, чего?
где набрал?
cmd запустил?
cmd
help
help del
del /?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Доцент
Участник

ru
Offline Offline

« Ответ #24 : 23-10-2009 15:21 » new

ну вот и маленький упущенный нюаньсик в виде cmd.
теперь почитаю, спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines