es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo muestro una ventana de desinstalación con CPack NSIS durante la reinstalación?

Tengo el siguiente archivo CMakeLists.txt (lo único en el directorio):

cmake_minimum_required(VERSION 3.0.0)

project(CPackUninstallerTest)

set(CPACK_GENERATOR NSIS)
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
"DetailPrint \\\"Sleeping...\\\"
Sleep 3000"
)

file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test.txt" "Some output\n")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/test.txt" TYPE DATA)

include(CPack)

Ejecutar cmake y cpack funciona bien, y se genera .../build/CPackUninstallerTest-0.1.1-win64.exe.

La ejecución del instalador funciona como se espera:

Imagen

Y la ejecución del desinstalador (Uninstall.exe en el directorio de instalación) también funciona, donde el sleep dura tres segundos:

Imagen

Sin embargo, esta ventana de desinstalación no aparece si intento instalar encima de una instalación existente. Después de hacer clic en Sí aquí:

Imagen

Esa ventana desaparece durante tres segundos (mientras se desinstala) antes de que se ejecute el nuevo instalador.

Esto es una experiencia de usuario terrible y hace que vuelvan a ejecutar el instalador mientras esperan al desinstalador oculto, lo que causa resultados confusos.

¿Cómo configuro NSIS o CMake/CPack para mostrar la barra de progreso del desinstalador al usar CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL y reinstalar?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para mostrar la barra de progreso del desinstalador al usar CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL y reinstalar, puedes agregar la siguiente línea al archivo CPackConfig.cmake:

    set(CPACK_NSIS_RUN_UNINSTALL_BEFORE_INSTALL ON)
    

    Esto obligará a NSIS a mostrar la barra de progreso del desinstalador incluso si existe una instalación previa. Con esta configuración, al instalar encima de una instalación existente, aparecerá la siguiente ventana:

    enter image description here

    Al hacer clic en “Sí”, se iniciará la barra de progreso de desinstalación y una vez completada, comenzará la nueva instalación:

    enter image description here

Comments are closed.