uninstall програма

6 отговора 182 прегледа
#1

uninstall програма

Искам да си направя uninstall програма на едно приложение и ме интересува как така самата uninstall програма се самоизтрива заедно с останалите файлове в папката на програмата при положение че е стартирана (все пак става дума за windows а не за dos).

Отговор
в отговор на v_automation #2

Re: uninstall програма

Ти се опита да ми помогнеш преди няколко дни, сега и аз ще ти дам съвет :

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;
Слагаш едно предупреждение, че системата трябва да бъде рестартирана и...сещаш се

Отговор
в отговор на v_automation #3

Re: uninstall програма

Ами идеята е не особенно интелигентна - правиш си bat файл (него можеш да изтриеш докато работи ;-))) ) и в него записваш какво точно да ти се изтрие.


procedure DELETEMe;
var
BatchFile: TextFile;
BatchFileName: string;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
{ create a batchfile in the applications directory }
BatchFileName := ExtractFilePath(ParamStr(0)) + '$$336699.bat';

{ open and write the file }
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);

Writeln(BatchFile, ':try');
Writeln(BatchFile, 'del "' + ParamStr(0) + '"');
Writeln(BatchFile,
'if exist "' + ParamStr(0) + '"' + ' goto try');
Writeln(BatchFile, 'del "' + BatchFileName + '"');
CloseFile(BatchFile);

FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_HIDE;

if CreateProcess(nil, PChar(BatchFileName), nil, nil,
False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,
ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;

end;

---
Колкото повече, толкова повече.
Отговор
в отговор на v_automation #4

Re: uninstall програма

Здравейте!
Благодарско за отговорите!
Искам да поясня какво ме интересува по-точно.
Аз искам uninstall-а който ще направя да работи поне под windows 2000.
Като отворя uninstall в регистрите и забелязвам че всички програми си имат собствено uninstall.exe което се намира в директорията на самата програма.
Когато се стартира съответния uninstall.exe то премахва всички файлове, себеси и папката в която се намира. Интересува ме как се прави професионално. Тези досовски варянти със сигурност ще станат но дали и програма като ICQ използва подобен подход? Освен това някакав microsoft-ски uninstaller премахна всичко освен папката на програмата при положение че програмата си беше стартирана и си работеше. Отворих папката и тя беше абсолютно празна. Опитах да я делна докато програмата продължаваше да си работи но не стана и ми даде съобщение че е в употреба (а беше празна). После затворих програмата и тогава ми позволи да изтрия празната папка. Къде реално се е намирал файла който беше ръннат от тази папка при положение че след uninstall-а папката беше празна? Как се правят подобни "фокуси"? Молs споделете мисли и наблюдения не се стеснявайте :)

Отговор
в отговор на v_automation #5

Re: uninstall програма

Не съм сигурен, че повечето програми ползват точно това кото казваш - по скоро повечето ползват инстал сиситемата на Win - която си прави uninstall файл - и той стои в папкта на програмата. След което се стартира нещо от вида на :
H:\WINDOWS\IsUninst.exe -f"H:\Program Files\AsusUpdate\Uninst.isu"

След като си се навил да си правиш собствен деинсталатор - има два варианта да разбереш как го правят другите - първия е да се заровиш дълбоко в MSDN, другия е да свалиш някой инсталатор с код (има такива ) без значение на C/Pascal и да намериш това което ти трябва.
Мисля, че имаше начин да се стартира процес (програма) с параметри които да не заключват самата програма - но не съм сигурен.
А пък ICQ е най-лошия пример за инсталация/деинсталация който си избрал ;-)))

---
Колкото повече, толкова повече.
Отговор
в отговор на PhantomAS #6

Re: uninstall програма

Здравей!
А каква ще кажеш за тоя номер с деинсталирането на програмата при положение че тя е стартирана?

Отговор
в отговор на v_automation #7

Re: uninstall програма

Ами деинсталатора може да стартира и програма - в случая малко exe което работи на принципа на онези компоненти за single instance - проверява дали съществува програмата и след като и намери инстанция я гаси - просто е ;-)))) В торри има доста подобни компоненти - не е трудно да се направи модификация, разбира се - трябва да се добавят няколко реда код и в основната програма.

---
Колкото повече, толкова повече.
Отговор