如何在安装cMake + WIX安装程序时获取当前用户环境变量

k10s72fa  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(217)

bounty将在3天后过期。回答此问题可获得+50的声誉奖励。dbz正在寻找来自声誉良好来源的答案

我使用cMake + Wix来生成我的安装程序。我的程序必须安装在任何计算机的C:\Users\UserName\MyProgram中。
问题是,当我使用cPack生成安装程序时,我是这样设置安装目录的:

set(CPACK_WIX_SKIP_PROGRAM_FOLDER TRUE)
set(CPACK_PACKAGE_INSTALL_DIRECTORY $ENV{USERPROFILE}\\${CPACK_PACKAGE_VENDOR}\\${CPACK_PACKAGE_NAME})

当我生成安装程序并将其提供给客户端来安装我的程序时,程序试图在“旧”用户名(生成安装程序的机器的用户名)下安装。

C:\Users\OldUserName\MyProgram

此用户名在正在安装的计算机上无法识别,因为它不存在,因为它是生成安装程序的计算机的用户,而不是当前用户。
为什么会这样呢?因为它是作为安装路径存储的,我不知道如何告诉WIX取安装程序运行机器的“当前用户”来生成安装路径。

zfycwa2u

zfycwa2u1#

我没有wix + cpack管道设置,但发现这个问题很有趣。也许这些信息可能会有帮助。

  • 我认为使用CPACK_WIX_SKIP_PROGRAM_FOLDER可能不正确。ref

注使用此功能创建的安装程序不会考虑创建安装程序的系统与可能使用安装程序的系统之间的差异。因此,安装程序可能会尝试安装到不可用或非预期的驱动器上,或者安装路径不符合执行安装的系统的本地化或惯例。

  • 对于Windows,一般情况下,CPACK_SET_DESTDIR应设置为false,CPACK_PACKAGING_INSTALL_PREFIX可用于设置安装根目录ref
  • 也适用于一般的CPack方式(CPACK_PACKAGING_INSTALL_PREFIX),它只会在配置时间参考求值。也可以不求值/转义CMake变量,但这在这里没有帮助,因为我预计wix无法处理CMake路径。所以我不知道CPACK_PACKAGING_INSTALL_PREFIX的默认值,它应该是\用户将已经工作,或者如果这不适用于Windows。
  • 这里引用他们的目的是在路径中使用%APPDATA%,我检查了CMake不会直接计算,但我不确定wix是否可以处理它。

相关问题