#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)
Комментариев нет:
Отправить комментарий