Jestem nowy w NSIS i muszę wiedzieć, że w deinstalatorze mogę sprawdzić, czy aplikacja (która jest w C++) jest uruchomiona i zamknąć ją przed odinstalowaniem.Sprawdzanie, czy aplikacja działa w NSIS przed odinstalowaniem
Odpowiedz
W zależności od zastosowania, masz kilka możliwości:
- Jeśli aplikacja ma okno z nieco unikalną nazwę klasy, można użyć FindWindow
- Jeśli aplikacja tworzy nazwanego obiektu jądra (Mutex itp) można sprawdzić dzwoniąc do niego poprawną natywne API win32 z wtyczką systemu
- Korzystanie 3rd party plugin jak FindProcDLL
Użyj wtyczki NsProcess. Pobierz go tutaj ->NSProcess
Jak z niego korzystać? Tak proste, jak:
${nsProcess::KillProcess} "${APP_EXE}" $R4
gdzie APP_EXE jest nazwą aplikacji ...
Pobieranie będzie również powiedzieć, jak go używać ... :)
Oto nieco bardziej wersja do korzystania NSProcess że żąda, aby zamknąć aplikację, a nie wypowie jej (odpowiedź Owena)
${nsProcess::FindProcess} "${APP_EXE}" $R0
${If} $R0 == 0
DetailPrint "${AppName} is running. Closing it down"
${nsProcess::CloseProcess} "${APP_EXE}" $R0
DetailPrint "Waiting for ${AppName} to close"
Sleep 2000
${Else}
DetailPrint "${APP_EXE} was not found to be running"
${EndIf}
${nsProcess::Unload}
Najlepszym rozwiązaniem! – MiBol
Wystarczy upewnić się, że pierwszą rzeczą, że instalacja lub un-i nstall robi to, aby usunąć wszystkie pliki xyz.tmp w% TEMP (lub innym katalogu zapisywalnym aplikacji) przed uruchomieniem pętli poniżej. Żadne wtyczki nie są wymagane.
!macro IsRunning
ExecWait "cmd /c for /f $\"tokens=1,2$\" %i in ('tasklist') do (if /i %i EQU xyz.exe fsutil file createnew $TEMP\xyz.tmp 0)"
IfFileExists $TEMP\xyz.tmp 0 notRunning
;we have atleast one main window active
MessageBox MB_OK|MB_ICONEXCLAMATION "XYZ is running. Please close all instances and retry." /SD IDOK
Abort
notRunning:
!macroEnd
- 1. Sprawdzanie, czy działa Android.
- 2. sprawdzanie, czy SKNode działa SKAction
- 3. Sprawdź, czy aplikacja działa - InstallJammer
- 4. Sprawdzanie, czy kod działa w konstruktorze interfejsów
- 5. Wtyczka NSIS Eclipse nie działa
- 6. Sprawdzanie, czy aplikacja na Twitterze jest zalogowana na Androidzie
- 7. Sprawdzanie, czy exec() działa poprawnie, czy nie
- 8. Sprawdzanie zależności .NET przed uruchomieniem
- 9. Czy aplikacja phonegap działa w tle?
- 10. Sprawdzanie ciągu zerowego przed konkatenacją
- 11. Sprawdzanie poprawności Linq2Sql przed SubmitChanges()
- 12. Problem z odinstalowaniem pakietów NuGet
- 13. NSIS - sprawdź, czy istnieje wartość klucza rejestru
- 14. Sprawdzanie rozmiaru pobieranego przed pobraniem
- 15. Wyzwalacz MySQL przed Wstaw wartość Sprawdzanie
- 16. Sprawdź, czy aplikacja działa na symulatorze
- 17. iOS - wykrywanie, czy aplikacja działa pod Xcode
- 18. instalatora NSIS z .NET 4.5
- 19. Czy aplikacja C# monitoruje, jak długo działa?
- 20. Sprawdzanie, czy aplikacja iOS została uruchomiona przez Siri
- 21. Sprawdzanie, czy łańcuch jest poprawny json przed próbą analizowania go?
- 22. VB.NET Sprawdzanie, czy plik jest otwarty przed kontynuowaniem odczytu/zapisu?
- 23. Jak wykryć, czy aplikacja działa na urządzeniach z raportem przed uruchomieniem Google Play?
- 24. Sprawdzanie autoryzacji http w mvc przed wysłaniem formularza ajaxowego
- 25. Problemy z odinstalowaniem oh-my-zsh?
- 26. Sprawdź, czy aplikacja działa na lądzie, czy nie.
- 27. Android: jak sprawdzić, czy aplikacja działa w tle
- 28. Niezawodny sposób sprawdzania, czy aplikacja na Androida działa w "BlueStacks"
- 29. Czy aplikacja Qt działa w Google Native Client?
- 30. Flaga błędu instalatora NSIS
FindProcDLL nie będzie działać z ostatniej wersji NSIS jak tego komentarza, 2,46, wydany w 2009 roku – Rex
Inną opcją jest to: 'ExecWait taskkill/IM nazwa programu/F' –