Odinstalowywanie programu

0

Cześć. Właśnie tworzę swój własny instalator no i mam już instalator, ale teraz przyszedł czas na deinstalator. Wszystko zrobiłem do mometu, kiedy zostaje mi sam plik deinstalatora w pustym folderze. No i teraz trzeba go jakoś usunąć. Myślałem o bawieniu się w restarty kompa i tam usuwanie pliku przez cmd.exe, ale to bez sensu, trzeba jakoś to zrobić, żeby nie trzeba robić resa. Przeglądałem źródła InnoSetup'a ale tam jakoś gościo pomotał wszystko. Teraz jedyne co widze to tworzenie pliku wsadowego i tam usuwanie tego pliku i katalogu a na końcu siebie. Wszystko by było ok, ale kaszana się zaczyna, kiedy niemoże usunąć pliku instalatora, bo plik jest używany (niezdąża się Application.Terminate). No i teraz mam pytanie: czy ktoś by mógł mi podpowiedzieć jak w pętli pliku BAT jakoś sprawdzić czy plik jest uruchomiony i go prubować usunąć do skutku ? Za wszelką pomoc z góry dziękuję :)

0

To ja z innej beczki - polecam Ci gotowy program do robienia instalek i deinstalek - najlepszy jaki znam i w dodatku za friko - Nullsoft NSIS :)

A co do twojego problemu, to sam chętnie poznam sposób na wykonanie..

0

Albo mi się wydaje, albo w bat'ach jest możliwość odczekania "chwili". Ale nie jestem pewny. Niestety pliki wsadowe w DOSie ie Windowsach mają bardzo skromne możliwości (w porównaniu choćby z Linuxem, gdzie wsadowo można regularne programy pisać). Druga sprawa - nie jestem pewny, ale czy aby InnoSetup nie korzysta z jakiegoś Windowsowego wbudowanego instalatora (który sam siebie nie usuwa, tylko plik z info o tym, co ma usunąć)?

0

Witam

Proponuje ci lekko free stylowe rozwiązanie poniekąd z gatunku początkującej virii :-)

A może nie gdyż niektóre komercyjne programy, też tak robią :-)

  1. W kodzie programu piszesz procedure ktora tworzy plik bat z w katalogu np. c:\windows
  2. W programie rownież piszesz procedure ktora dodaje polecenie uruchomienia po starcie systemu twojego pliku bat ( autostart + rejestr itp - opis jest tu gdzieś na forum )
  3. W pliku bat deklarujesz polecenia usuniecia twojego dezinstalatora w pliku *.exe
    , oraz wlasnie tego pliku bat, i klucza w run-ie. Jest to bezproblemowe działane gdyż plikem wsadowym "ładujesz" ciąg poleceń do powłoki windowsa jednorazowo, także nie jest wymagana obecność pliku bat po "załadowaniu" procedur

Ja tak zrobilem dezinstaloatora, dodałem jeszcze w programie formatke że trzeba ponownie uruchomić komputer itp. I wszystko działa ok.

Pozdrawiam

#max

http://www.progmax.republika.pl

0

#Max, ale przecież autor wątku napisał, że ma tak zrobione, ale chce zrobić tak, by to nie wymagało restartu.

0

Hmmm, a może ktoś zna dobrze strukture plików BAT i wie jak np.: w pętli sprawdzić czy plik istnieje, jak istanieje to go usunąć, i potem znowu sprawdzić w pętli czy istnieje i tak w kółko aż pliku nie będzie to wtedy wykona exit. na razie tylko co się orientuje to, że exist sprawdza czy plik istnieje :)

0

Hmmm o dziwo jak zaraz po:

AssignFile(TF, ExtractFilePath(Application.ExeName) + 'uninstall.bat');
Rewrite(TF);
Writeln(TF, '@echo off');
Writeln(TF, 'del uninstall.exe');
Writeln(TF, 'del uninstall.bat');
Write(TF, 'exit');
CloseFile(TF);

ShellExecute(Handle, 'open', PChar(ExtractFilePath(Application.ExeName) + 'uninstall.bat'), nil, nil, SW_HIDE);

dam linijke Application.Terminate; to usuwa wszystko, tak jak powinno być, ale boje się, że jak ktoś ma słabszy sprzęt od mojego (256 RAM) to może niezdążyć się zamknąć :| Co o tym myślicie ?

0

Na 4p jest artykuł o usuwaniu plików, zarówno w systemach Win9x jak i NT, przy następnym uruchomieniu systemu.

0

Moze taki batch:

@echo off>nul
:petla
del plik.exe>nul
if exist plik.exe goto petla
del plik.bat

Ja sie zabardzo na batchach nie znam, ale dziala jak nalezy :] (poza tym, ze wysypuje multum "Odmowa dostepu" ;])

0

Pawel200x.5 dzięki, <ort>na pewno </ort>ten kod będzie lepszy od mojego ;) Jeszcze raz dziękuję i pozdrawiam.

// Co comments - [glowa] - Q

1 użytkowników online, w tym zalogowanych: 0, gości: 1