Soy nuevo en NSIS, y necesito saber que en el desinstalador, cómo puedo verificar si la aplicación (que está en C++) se está ejecutando y cerrarla antes de desinstalar.Comprobando si la aplicación se está ejecutando en NSIS antes de desinstalar
Respuesta
Dependiendo de la aplicación, que tienen un par de opciones:
- Si la aplicación tiene una ventana con un nombre de clase algo único, se puede utilizar FindWindow
- Si su aplicación crea un objeto de núcleo denominado (mutex etc) se puede comprobar mediante una llamada al API de Win32 nativa correcta con el sistema de plugins
- uso de un tercero plug-in fiesta como FindProcDLL
Use el plugin NsProcess. Descárguelo aquí ->NSProcess
¿Cómo usarlo? Tan simple como:
${nsProcess::KillProcess} "${APP_EXE}" $R4
donde APP_EXE es el nombre de su aplicación ...
La descarga también le dirá cómo usarlo ... :)
Aquí es un poco más versión para el uso de NSProcess que solicita el cierre de la aplicación en lugar de que termina (respuesta de Owen)
${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}
La mejor solución! – MiBol
Sólo asegúrese de que lo primero que instalar o UN-I nstall does es eliminar todos los archivos xyz.tmp en% TEMP (o cualquier otro directorio de escritura de la aplicación) antes de que se ejecute el ciclo siguiente. No se requieren complementos.
!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. Comprobando si mi aplicación de Windows se está ejecutando
- 2. Comprobando si el proceso aún se está ejecutando?
- 3. Comprobando si javascript está habilitado
- 4. Cómo determinar si una aplicación web se está ejecutando actualmente
- 5. Verifica programáticamente si se está ejecutando syncdb
- 6. ¿Cómo comprobar si una aplicación WPF ya se está ejecutando?
- 7. Desinstalar la aplicación de Android antes de cada depuración
- 8. Comprobando si la base de datos está restaurando el estado
- 9. Comprobando si la cookie está configurada
- 10. Descubriendo si la actividad de Android se está ejecutando
- 11. Java: Comprobando si la PC está inactiva
- 12. ANDROID: cómo comprobar si la animación se está ejecutando antes de comenzar una nueva animación
- 13. Cómo solicito al usuario desinstalar la versión anterior con NSIS
- 14. La aplicación Detect se está ejecutando en Kindle Fire
- 15. comisión si ya se está ejecutando
- 16. Comprobar si el proceso se está ejecutando
- 17. Cómo detectar si el iphone está sincronizado cuando la aplicación no se está ejecutando
- 18. Comprobar si la animación se está ejecutando en cocos2d-x
- 19. Detectar si la aplicación se está ejecutando en la computadora portátil
- 20. Notificación en Phonegap mientras la aplicación no se está ejecutando
- 21. ¿Cómo verificar si el servidor X se está ejecutando?
- 22. NSIS obtener la ruta del archivo instalador actual que se está ejecutando
- 23. BroadcastReceiver cuando la aplicación no se está ejecutando
- 24. Rails 3: ¿cómo detectar si la aplicación se está ejecutando en modo servidor para entornos diferentes?
- 25. Detectando si un programa ya está instalado con NSIS
- 26. ¿Hay alguna forma de determinar si la aplicación de Android se está ejecutando a pantalla completa?
- 27. La mejor manera de verificar si una aplicación de iPhone se está ejecutando por primera vez
- 28. ¿Cómo saber si la actualización MATERIALIZED VIEW se está ejecutando?
- 29. Comprobando si el archivo está completamente escrito
- 30. powershell: ¿cómo comprobar si se está ejecutando la transcripción?
FindProcDLL no funcionará con la última versión de NSIS a partir de este comentario, 2.46, lanzado en 2009. – Rex
Otra opción es la siguiente: 'ExecWait TaskKill/IM program_name/F' –