windows installer - Crear el icono del escritorio de Windows en CMake+CPack+NSIS
windows-installer (5)
Estoy usando el generador de paquetes NSIS en CMake 2.8.1 para distribuir una aplicación Qt. Todo funciona bien ... excepto el uso de CPACK_CREATE_DESKTOP_LINKS
para crear un enlace de escritorio a la aplicación.
He revisado la fuente de CMake (incluida su propia definición de instalación "bootstrap" para Windows), y hasta donde sé, estoy haciendo lo mismo.
Aquí está la sección relevante de mi archivo CMakeLists.txt
.
set(CPACK_GENERATOR NSIS)
set(CPACK_NSIS_PACKAGE_NAME "${EWS_APP_NAME}")
set(CPACK_NSIS_DISPLAY_NAME "${EWS_APP_NAME}")
set(CPACK_NSIS_CONTACT "${EWS_EMAIL}")
set(CPACK_PACKAGE_EXECUTABLES "${EXE_TARGET_NAME}" "${EWS_APP_NAME}")
set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CMAKE_PROJECT_NAME}-${EWS_VERSION}")
# this works
set(CPACK_NSIS_MENU_LINKS "${EWS_WEBSITE}" "Homepage for ${EWS_APP_NAME}")
# this doesn''t
set(CPACK_CREATE_DESKTOP_LINKS "${EXE_TARGET_NAME}")
# Icon in the add/remove control panel. Must be an .exe file
set(CPACK_NSIS_INSTALLED_ICON_NAME bin////${EXE_TARGET_NAME}.exe)
set(CPACK_NSIS_URL_INFO_ABOUT "${EWS_WEBSITE}")
set(CPACK_NSIS_HELP_LINK "${EWS_WEBSITE}")
¡Se agradecen todas las ideas o sugerencias de depuración!
Una CPACK_NSIS_EXTRA_INSTALL_COMMANDS
CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
que CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
es usar CPACK_NSIS_EXTRA_INSTALL_COMMANDS
y CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
para insertar los comandos de creación / eliminación de enlaces directamente.
set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
CreateShortCut ///"$DESKTOP////${EWS_APP_NAME}.lnk///" ///"$INSTDIR////bin////${EXE_TARGET_NAME}.exe///"
")
set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
Delete ///"$DESKTOP////${EWS_APP_NAME}.lnk///"
")
Prefiero usar la configuración CPACK_CREATE_DESKTOP_LINKS
más general (¿y multiplataforma?), Por lo que se agradecen las ideas de seguimiento. Pero esto funciona en un apuro.
Lo más probable es que no necesite citar $ {EXE_TARGET_NAME} ya que es una cadena.
intente agregar esto a su CMakeLists.txt
:
set (CPACK_NSIS_MODIFY_PATH "ON")
Creo que debería agregar una página después de la licencia que da la opción de agregar el directorio de instalación a la ruta, y agregar una opción para crear enlaces de escritorio.
Para otros que se encuentran con este hilo, están las variables CPACK_NSIS_CREATE_ICONS_EXTRA y CPACK_NSIS_DELETE_ICONS_EXTRA CMake que se pueden usar para crear accesos directos arbitrarios (menú Inicio, escritorio, etc.). El lado eliminador de las cosas puede tener un pequeño problema, pero sigue siendo una forma relativamente fácil y flexible de obtener accesos directos donde los desee. La ventaja adicional es que también puede agregar argumentos de línea de comandos si es necesario. Este breve artículo explica cómo usar estas variables para crear y eliminar elementos del menú Inicio e incluye enlaces a documentación para otras variables NSIS útiles. Debería ser bastante fácil utilizar el enfoque para atajos de escritorio con la información presentada allí.
Estoy usando la siguiente macro para agregar enlaces tanto al menú de archivos de programa como al escritorio
macro(prepareNSIS_Link linkName appName params)
#prepare start menu links
LIST(APPEND CPACK_NSIS_CREATE_ICONS_EXTRA " CreateShortCut ''$SMPROGRAMS////$STARTMENU_FOLDER////${linkName}.lnk'' ''$INSTDIR////bin////${appName}.exe'' ''${params}''")
LIST(APPEND CPACK_NSIS_DELETE_ICONS_EXTRA " Delete ''$SMPROGRAMS////$START_MENU////${linkName}.lnk''")
#prepare desktop links
LIST(APPEND CPACK_NSIS_CREATE_ICONS_EXTRA " CreateShortCut ''$DESKTOP////${linkName}.lnk'' ''$INSTDIR////bin////${appName}.exe'' ''${params}''")
LIST(APPEND CPACK_NSIS_DELETE_ICONS_EXTRA " Delete ''$DESKTOP////${linkName}.lnk''")
endmacro()
Para crear un enlace a [installFolder]/bin/app.exe -some -parameters
como:
prepareNSIS_Link("My application" "app" "-some -parameters")
Una vez que configure todos sus enlaces, sea agradable y reemplace el punto y coma con nuevas líneas:
string (REPLACE ";" "/n" CPACK_NSIS_CREATE_ICONS_EXTRA "${CPACK_NSIS_CREATE_ICONS_EXTRA}")
string (REPLACE ";" "/n" CPACK_NSIS_DELETE_ICONS_EXTRA "${CPACK_NSIS_DELETE_ICONS_EXTRA}")