Страницы

Поиск по вопросам

пятница, 20 марта 2020 г.

Самоудаление через реестр

#delphi


Здравствуйте! 
Вот с сайта откопал, какой путь к реестру нужно, что самоудалить прогу:
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
Записи в этом разделе указывают на имена файлов, которые должны выполниться один
раз во время загрузки системы. Для удаления программы, нужно всего лишь добавить запись
с именем файла, который удалит ее или командой del "имя файла"."
Но не могу понять, что делать в Delphi. Вот то, что сам написал:
reg:=TRegistry.Create;

reg.RootKey:=HKEY_LOCAL_MACHINE;

try
reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce',true);
reg.WriteString('del','del "C:\...\Project2.exe"');
reg.CloseKey;
reg.Free;
except
end;
    


Ответы

Ответ 1



Попробуйте слеши продублируйте: вместо \ пишите \\, например так reg.WriteString('del','del ' + StringReplace('"C:\...\Project2.exe"', '\', '\\', [rfReplaceAll]); Уберите try except end и посмотрите какую ошибку выдает - может у вас нет прав на запись в эту ветку. Что записалось в реестр посмотрите. Попробуйте запись в реестр команду вручную и проверьте срабатывает ли он при перезагрузке - этот ключ может быть проигнорирован, если это указано в политике безопасности. Попробуйте писать в реестр такую команду cmd /C del /F /Q "C:\RHDSetup.log"

Ответ 2



Для самоудаления лучше всего использовать bat-файл. :1 del /F /Q "C:\prog.exe" || goto :1 del /F /Q "C:\delete_prog.bat" Генерить и запускать его можно прям из программы. 2-я строка будет пытаться удалить prog.exe пока запущенный процесс программы не отпустит его. После успешного удаления программы 3-я строка удалит сам bat-файл. UPD: Чтобы процесс удаления работал в фоне без окна консоли в панели задач запускать его нужно через ShellExecute(0, 'Open', 'C:\delete_prog.bat', nil, nil, SW_HIDE)

Комментариев нет:

Отправить комментарий