2012-10-30 8 views
7

Mam skrypt Inno Setup, który instaluje moją aplikację i towarzyszące jej pliki. W niektórych systemach wymagane jest ponowne uruchomienie, a na niektórych nie. Chciałbym poznać przyczynę wymaganego restartu. Jak zrobić to najbardziej inteligentnie? Dziękuję bardzo.InnoSetup: Znajdź przyczynę restartu

+1

Tylko do debugowania? Możesz zajrzeć do HKLM \ System \ CurrentControlSet \ Control \ Session Manager \ PendingFileRenameOperations, aby sprawdzić, czy w kolejce znajdują się ruchy/usunięcia oczekujące na ponowne uruchomienie. –

+0

@Alex, nie ma bezpośredniego sposobu na określenie go ze skryptu InnoSetup, więc może to być odpowiedź. – TLama

+0

Tak, ustaw jako "odpowiedź". – tmighty

Odpowiedz

4

Dla celów debugowania można zajrzeć do środka

HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

, aby zobaczyć, czy są jakieś ruchy/zmienia nazwę/usuwa kolejce do następnego restartu.

(Sysinternals utility viewer)

+1

To naprawdę pomogło, idealne rozwiązanie, dziękuję bardzo! – tmighty

1

Zastosowanie /LOG po uruchomieniu instalacji, a następnie zajrzeć do pliku dziennika, który generuje (domyślnie w %TEMP%). Powinien dość jasno pokazać, które pliki zostały umieszczone w kolejce do zamiany przy ponownym uruchomieniu, lub które z innych przyczyn spowodowały żądanie ponownego uruchomienia.

Zazwyczaj restartuje są wywołane przez nadużywanie restartreplace bez użycia coś AppMutex aby upewnić się, że wniosek został poprawnie zamknięty przed instalacją lub z subinstalls wykonywanych podczas [Run].