uninstall програма
6 отговора
182 прегледа
uninstall програма
Искам да си направя uninstall програма на едно приложение и ме интересува как така самата uninstall програма се самоизтрива заедно с останалите файлове в папката на програмата при положение че е стартирана (все пак става дума за windows а не за dos).
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;
Слагаш едно предупреждение, че системата трябва да бъде рестартирана и...сещаш се
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;
Слагаш едно предупреждение, че системата трябва да бъде рестартирана и...сещаш се
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;
---
Колкото повече, толкова повече.
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;
---
Колкото повече, толкова повече.
Re: uninstall програма
Здравейте!
Благодарско за отговорите!
Искам да поясня какво ме интересува по-точно.
Аз искам uninstall-а който ще направя да работи поне под windows 2000.
Като отворя uninstall в регистрите и забелязвам че всички програми си имат собствено uninstall.exe което се намира в директорията на самата програма.
Когато се стартира съответния uninstall.exe то премахва всички файлове, себеси и папката в която се намира. Интересува ме как се прави професионално. Тези досовски варянти със сигурност ще станат но дали и програма като ICQ използва подобен подход? Освен това някакав microsoft-ски uninstaller премахна всичко освен папката на програмата при положение че програмата си беше стартирана и си работеше. Отворих папката и тя беше абсолютно празна. Опитах да я делна докато програмата продължаваше да си работи но не стана и ми даде съобщение че е в употреба (а беше празна). После затворих програмата и тогава ми позволи да изтрия празната папка. Къде реално се е намирал файла който беше ръннат от тази папка при положение че след uninstall-а папката беше празна? Как се правят подобни "фокуси"? Молs споделете мисли и наблюдения не се стеснявайте :)
Благодарско за отговорите!
Искам да поясня какво ме интересува по-точно.
Аз искам uninstall-а който ще направя да работи поне под windows 2000.
Като отворя uninstall в регистрите и забелязвам че всички програми си имат собствено uninstall.exe което се намира в директорията на самата програма.
Когато се стартира съответния uninstall.exe то премахва всички файлове, себеси и папката в която се намира. Интересува ме как се прави професионално. Тези досовски варянти със сигурност ще станат но дали и програма като ICQ използва подобен подход? Освен това някакав microsoft-ски uninstaller премахна всичко освен папката на програмата при положение че програмата си беше стартирана и си работеше. Отворих папката и тя беше абсолютно празна. Опитах да я делна докато програмата продължаваше да си работи но не стана и ми даде съобщение че е в употреба (а беше празна). После затворих програмата и тогава ми позволи да изтрия празната папка. Къде реално се е намирал файла който беше ръннат от тази папка при положение че след uninstall-а папката беше празна? Как се правят подобни "фокуси"? Молs споделете мисли и наблюдения не се стеснявайте :)
Re: uninstall програма
Не съм сигурен, че повечето програми ползват точно това кото казваш - по скоро повечето ползват инстал сиситемата на Win - която си прави uninstall файл - и той стои в папкта на програмата. След което се стартира нещо от вида на :
H:\WINDOWS\IsUninst.exe -f"H:\Program Files\AsusUpdate\Uninst.isu"
След като си се навил да си правиш собствен деинсталатор - има два варианта да разбереш как го правят другите - първия е да се заровиш дълбоко в MSDN, другия е да свалиш някой инсталатор с код (има такива ) без значение на C/Pascal и да намериш това което ти трябва.
Мисля, че имаше начин да се стартира процес (програма) с параметри които да не заключват самата програма - но не съм сигурен.
А пък ICQ е най-лошия пример за инсталация/деинсталация който си избрал ;-)))
---
Колкото повече, толкова повече.
H:\WINDOWS\IsUninst.exe -f"H:\Program Files\AsusUpdate\Uninst.isu"
След като си се навил да си правиш собствен деинсталатор - има два варианта да разбереш как го правят другите - първия е да се заровиш дълбоко в MSDN, другия е да свалиш някой инсталатор с код (има такива ) без значение на C/Pascal и да намериш това което ти трябва.
Мисля, че имаше начин да се стартира процес (програма) с параметри които да не заключват самата програма - но не съм сигурен.
А пък ICQ е най-лошия пример за инсталация/деинсталация който си избрал ;-)))
---
Колкото повече, толкова повече.
Re: uninstall програма
Здравей!
А каква ще кажеш за тоя номер с деинсталирането на програмата при положение че тя е стартирана?
А каква ще кажеш за тоя номер с деинсталирането на програмата при положение че тя е стартирана?
Re: uninstall програма
Ами деинсталатора може да стартира и програма - в случая малко exe което работи на принципа на онези компоненти за single instance - проверява дали съществува програмата и след като и намери инстанция я гаси - просто е ;-)))) В торри има доста подобни компоненти - не е трудно да се направи модификация, разбира се - трябва да се добавят няколко реда код и в основната програма.
---
Колкото повече, толкова повече.
---
Колкото повече, толкова повече.