¿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:
Y la ejecución del desinstalador (Uninstall.exe
en el directorio de instalación) también funciona, donde el sleep dura tres segundos:
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í:
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?
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 archivoCPackConfig.cmake
: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:
Al hacer clic en “Sí”, se iniciará la barra de progreso de desinstalación y una vez completada, comenzará la nueva instalación: