Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление программой самой себя, после выхода удаление 
:(
    Опции темы
kruchinin
Дата 30.4.2003, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 19.4.2003

Репутация: нет
Всего: нет



Ситуация:

Программа завершает свою работу, и если в ней произошли какие-то определенные действия, то она удаляет саму себя.

Как это сделать?


PM MAIL   Вверх
Step
Дата 30.4.2003, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



на ходу клипай бат файл в котором делай задержку, потом из своей проги вызывай его, и сразу закрывай прогу, пока будет идти задержка, твоя прога закроется и потом удалиться

Недостаток, останется бат файл


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
HexoGenus
Дата 30.4.2003, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 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;
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
acp
Дата 30.4.2003, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 4.2.2003
Где: Владимир

Репутация: нет
Всего: 2



Цитата
Недостаток, останется бат файл


А вы что, не знаете, что батник может удалять сам себя? smile.gif
PM WWW ICQ   Вверх
Step
Дата 2.5.2003, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



acp даже так, так это вооще круто



можно еще в автозагрузку команду на удаление пихнуть


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
DENNN
Дата 2.5.2003, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
можно еще в автозагрузку команду на удаление пихнуть

Маньяки smile.gif
PM ICQ   Вверх
HexoGenus
Дата 3.5.2003, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(Step @ 2.5.2003, 14:12)
можно еще в автозагрузку команду на удаление пихнуть

команда из указанного мною ключа реестра будет выполнена только раз при следующем старте виндозы и потом виндоза сама эту команду из реестра вырежет...
это как раз то что вы в батничке в автозагрузке собрались прописывать smile.gif
хотя если результат тот же то какая по сути разница?
хотя... кстати учтите что место расположения папки автозагрузки может очень даже сильно меняться особенно при использовании профилей... tounge.gif

--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
man2002ua
Дата 3.5.2003, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



определенно маньяки.
я писал .com файл в ресурс - потом извлекал его, запускал. Тоже что и батник, только окна не мелькают smile.gif, а com - может самоудаляться.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
HexoGenus
Дата 4.5.2003, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(man2002ua @ 3.5.2003, 06:34)
определенно маньяки.
я писал .com файл в ресурс - потом извлекал его, запускал. Тоже что и батник, только окна не мелькают smile.gif, а com - может самоудаляться.

biggrin.gif
то же скажете
маньяки smile.gif
да вы нас ночью не видели...
Теперь серьезно... что будет если твой com файл во время исполнения повиснетconfused.gif
кто его удалит?
Одной из причин по которой может потребоваться грохать программу на компе, это несовместимость с аппаратурой... а это как раз тот случай когда она может повиснуть... так что все зависит от того что в данной реализации будет важнее: быстрое удаление или надежное удаление smile.gif
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
man2002ua
Дата 5.5.2003, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



как это - повиснет? Там только один цикл (можно не бесконечный) в к-м удаляется exe Файл...


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
DENNN
Дата 5.5.2003, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Я не много не в курсе: можно создать процесс без экзешника?

Тогда этот второй процесс может удалить файл, когда он более не понадобится.
PM ICQ   Вверх
HexoGenus
Дата 5.5.2003, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(man2002ua @ 5.5.2003, 07:13)
как это - повиснет? Там только один цикл (можно не бесконечный) в к-м удаляется exe Файл...

Читай тему smile.gif
"Программа выполнит определенные действия"
и в случае если результат автора не радует программа удалит себя smile.gif
я и не говорил что повиснет твой com файл...
я имею в виду возможность того что "определенные действия" приведут к зависанию и до твоей функции самоуничтожения (кстати не такой простой в своем исполнении) программа просто не дойдет... в моем варианте программа просто пропишет строчку в реестр и выполняет свои действия... если что не так она либо виснет либо благополучно завершается но пользователь в любом случае уверен что при следующей загрузке компа он файл уже не увидит smile.gif
А если программа после выполнения действий решила остаться на компе она просто удаляет строчку из реестра...

Кстати твой способ мне тоже нравится, но кажется с бат файлом проще, и разве нельзя бат файл запустить в свернутом окне?

Теперь по поводу вопроса
Я не много не в курсе: можно создать процесс без экзешника?

насколько я в курсе все процессы привязываются к своему приложению и пока они выполняются программу грохнуть нельзя... хотя кажется где-то видел примерчик программы которая грохала себя используя что то вроде этого примера удаления непустой папки

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
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
Fantasist
Дата 5.5.2003, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Не так давно (хотя нет, давно) я прочитал на delphimasters.ru, что в принципе грохнуть запущенный файл можно, надо только закрыть memory-mapped хендл этого файла, который windows автоматически создает при запуске программы (во всяком случае в Win98/NT).


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Leonid
Дата 6.5.2003, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Прохожий



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.4.2003

Репутация: нет
Всего: нет



Цитата
я имею в виду возможность того что "определенные действия" приведут к зависанию
и до твоей функции самоуничтожения (кстати не такой простой в своем исполнении) программа
просто не дойдет...

Может быть я ошибаюсь, но мне кажется, что если "определенные действия" приведут к зависанию,
значит программа не выполнила свою задачу и, следовательно, не должна самоуничтожиться.
По этому я предлагаю такой вариант:
Код

void DeleteSelf()
{
  const int nSize = MAX_PATH;
  char        fileName[nSize];
  char        bufer[nSize];
  CString   batFile;
  CString   batText = "@echo off\n:try\ndel ";

  GetModuleFileName(NULL, fileName, nSize);
  batFile    = ((GetEnvironmentVariable("Temp", bufer, nSize) > 0) ? bufer : "C:");
  batFile  += "\deleteSelf.bat";
  batText += fileName;
  batText += "\nif exist ";
  batText += fileName;
  batText += " goto try\ndel ";
  batText += batFile;

  DWORD NumOfBytes;
  HANDLE hbat = CreateFile(batFile, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ |
  FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  WriteFile(hbat, batText, strlen(batText), &NumOfBytes, NULL);
  CloseHandle(hbat);

  STARTUPINFO                  si;
  PROCESS_INFORMATION pi;
 
  ZeroMemory(&si, sizeof(si));
  si.cb = sizeof(si);
  si.wShowWindow = SW_HIDE;
  si.dwFlags = STARTF_USESHOWWINDOW;
 
  CreateProcess(NULL, LPSTR(LPCTSTR(batFile)), NULL, NULL, FALSE,
 IDLE_PRIORITY_CLASS | DETACHED_PROCESS, NULL, NULL, &si, &pi);
}


Я создал проект на базе диалога(просто для проверки) и поместил эту функцию в
обработчик кнопки "ОК".
Всё сработало замечательно.
Наслаждайтесь. Желаю удачи.


PM   Вверх
HexoGenus
Дата 6.5.2003, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(Leonid @ 5.5.2003, 22:12)
Может быть я ошибаюсь, но мне кажется, что если "определенные действия" приведут к зависанию,
значит программа не выполнила свою задачу и, следовательно, не должна самоуничтожиться.

Или она просто не может выполнить свою задачу на данном компьютере и следовательно должна самоуничтожиться tounge.gif
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1152 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.