向 cpack 添加额外命令 - NSIS 打包程序/安装程序

问题描述 投票:0回答:2

我想使用已经存在的 CPack 和 NSIS 来打包我的 Windows 项目

GeneratorConfig.cmake
文件,我想在其中添加一个额外的命令,将名为
.ini
myProject.ini
文件复制到
%APPDATA%/myProject/myProject.ini
中。

这是GeneratorConfig.cmake

SET(INSTALL_AN_ALREADY_EXISTING_DIR ".")
##########################################################################
## Begin NSIS Specific options
##------------------------------------------------------------------------
if(CPACK_GENERATOR MATCHES NSIS)
# Additional NSIS commands to uninstall start menu shortcuts
SET(CPACK_NSIS_DELETE_ICONS_EXTRA
  "Delete \"$SMPROGRAMS\\$MUI_TEMP\\${PROJECT_NAME}.lnk\" 
   StrCmp \"$INSTALL_DESKTOP\" \"1\" 0 +2
   Delete \"$DESKTOP\\${PROJECT_NAME}.lnk\" ")
# The display name string that appears in the Windows Add/Remove Program control panel
SET(CPACK_NSIS_DISPLAY_NAME "${PROJECT_NAME} ${PROJECT_VER_MAJOR}.${PROJECT_VER_MINOR}")
SET(CPACK_NSIS_DISPLAY_NAME_SET "TRUE")

# Extra NSIS commands that will be added to the end of the install Section, after your
# install tree is available on the target system.
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS 
    "CreateShortCut \"$SMPROGRAMS\\$STARTMENU_FOLDER\\${PROJECT_NAME}.lnk\" \"$INSTDIR\\.\\bin\\${PROJECT_EXE} \" -previousworkingdir \"$INSTDIR\\.\\bin\\app_icon.ico\"  
     StrCmp \"$INSTALL_DESKTOP\" \"1\" 0 +2
     CreateShortCut \"$DESKTOP\\${PROJECT_NAME}.lnk\" \"$INSTDIR\\.\\bin\\${PROJECT_EXE} \" -previousworkingdir \"$INSTDIR\\.\\bin\\app_icon.ico\" 
     ")

# Extra commands to fix permissions of bin/licenses folder
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS 
   "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS}
    ExecWait 'icacls \\\"$INSTDIR\\\\bin\\\\licenses\\\" /grant:r Users:\\\(OI\\\)\\\(CI\\\)\\\(F\\\)'
    ")

# A path to the executable that contains the installer icon.
SET(CPACK_NSIS_INSTALLED_ICON_NAME "${PROJECT__DIR}\\bin\\${PROJECT_EXE}")

# The default installation directory presented to the end user by the NSIS installer
SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")

# Title displayed at the top of the installer
SET(CPACK_NSIS_PACKAGE_NAME "${PROJECT_NAME} ${PROJECT_VER_MAJOR}.${PROJECT_VER_MINOR}")

SET(CPACK_NSIS_PAGE_COMPONENTS " ")

SET(CPACK_NSIS_MUI_FINISHPAGE_RUN ${PROJECT_EXE})
endif(CPACK_GENERATOR MATCHES NSIS)
##------------------------------------------------------------------------
## End NSIS Specific options
##########################################################################

我尝试使用下面的代码执行此操作,但这构建了包,但没有 复制

myProject.ini
任何地方。

SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS 
  "CreateDirectory \"$ENV{APPDATA}\\myProject\",
   SetOutPath \"$ENV{APPDATA}\\myProject\",
   File \"myProject.ini\" 
   ")

任何帮助或建议将不胜感激。

installation package nsis cpack
2个回答
2
投票

据我所知,您使用的“\”符号不足。

澄清一下:该字符串被评估两次,一次由 CMake 评估,一次由 CPack 评估,并且每次都会发生诸如 \->\ 和 \" -> " 之类的替换。请检查生成的 nsis 项目,了解实际生成的命令是什么以及所有 '"' 是否设置正确。

总结:尝试使用这个:

SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS 
  "CreateDirectory \\\"$ENV{APPDATA}\\\\myProject\\\",
   SetOutPath \\\"$ENV{APPDATA}\\\\myProject\\\",
   File \\\"myProject.ini\\\" 
   ")

0
投票

我想将源目录中

share/
文件夹中的示例配置文件复制到
%AppData%/MyCompany

Srv19 的帖子的基础上,我最终得到了以下结果,但有一些细微的差别:

set(CPACK_PACKAGE_VENDOR "MyCompany")

# Create the directory :
list(APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS "CreateDirectory '$%AppData%\\\\${CPACK_PACKAGE_VENDOR}'")
# Set the NSIS variable OUTDIR :
list(APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS "SetOutPath '$%AppData%\\\\${CPACK_PACKAGE_VENDOR}'")
# Add file to be extracted to $OUTDIR :
list(APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS "File '${CMAKE_SOURCE_DIR}\\\\share\\\\MyProject.ini'")
# Replace ';' by '\n' in CPACK_NSIS_EXTRA_INSTALL_COMMANDS :
string (REPLACE ";" "\n" CPACK_NSIS_EXTRA_INSTALL_COMMANDS "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS}")
© www.soinside.com 2019 - 2024. All rights reserved.