如何将 NSIS 的 RequestExecutionLevel 选项添加到 CMakeLists.txt

Posted

技术标签:

【中文标题】如何将 NSIS 的 RequestExecutionLevel 选项添加到 CMakeLists.txt【英文标题】:How do I add the RequestExecutionLevel option of NSIS to a CMakeLists.txt 【发布时间】:2011-12-15 15:08:54 【问题描述】:

我正在尝试让一个在 Windows 7 上使用 NSIS 编译的安装程序在没有管理员权限的情况下工作。该项目使用 CMake 设置并使用 VC2010 编译。我发现我必须使用

RequestExecutionLevel user

选项。我的问题是:我必须在我的 CMakeLists.txt 中添加什么才能将此选项传递给 NSIS?我找到了

set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "RequestExecutionLevel user")

在 google 的某个地方,但是这给出了一个错误,说这个选项不能在这个部分中设置。

非常感谢任何帮助

【问题讨论】:

我不知道 CMake,但在 NSIS 中,RequestExecutionLevel 是安装程序属性(在该部分中无效)。因此,您可以将它放在脚本中的任何位置,除了部分或函数。是这样吗? 【参考方案1】:

我拥有的 CMake 版本在 NSIS 模板中有 @CPACK_NSIS_DEFINES@,因此将 set(CPACK_NSIS_DEFINES "RequestExecutionLevel user") 添加到 CMakeLists.txt 也可以完成这项工作。

虽然it may require extra work for component based install.

【讨论】:

【参考方案2】:

您可以尝试以下步骤:

    将 NSIS.template.in 复制到您的项目目录,例如一个名为“包装”的子目录:

    xcopy \cmake-install-path\modules\share\cmake-xxx\Modules\NSIS.template.in \your-project-directory\packaging\

    RequestExecutionLevel user 添加到 NSIS.template.in

    更新 CMakeLists.txt 中的 CMAKE_MODULE_PATH:

    list(APPEND CMAKE_MODULE_PATH $CMAKE_SOURCE_DIR/packaging)

然后重建你的包,看看它是否有效。

【讨论】:

以上是关于如何将 NSIS 的 RequestExecutionLevel 选项添加到 CMakeLists.txt的主要内容,如果未能解决你的问题,请参考以下文章

如何使用NSIS脚本将应用程序安装为Windows服务

如何使用 CPACK_NSIS_WELCOME_TITLE 和 CPACK_NSIS_FINISH_TITLE?

如何在 CPACK 和 NSIS 中为文本文件添加开始菜单条目

如何要求用户使用 NSIS 卸载以前的版本

NSIS 安装程序应用程序名称未正确显示

如何使用 nsis 获取多个显卡信息?