【问题标题】:Using NSIS command line to globally define product definitions使用 NSIS 命令行全局定义产品定义
【发布时间】:2013-03-30 03:57:55
【问题描述】:

我想通过将参数传递给 makensis 来控制我的 NSIS 安装程序的品牌:

makensis.exe /DCOMPANY_X=1 installer.nsi  

以下是我的 NSI 文件中列出的前几行:

!ifdef ${COMPANY_X}
  !define PRODUCT_NAME "Widget Pro"
  !define PRODUCT_VERSION "v2.0"
  !define PRODUCT_PUBLISHER "ACE Company"
  !define PRODUCT_WEB_SITE "www.ace.com"
  !define PRODUCT_COPYRIGHT "Copyright 2013 Ace"
!else
  !define PRODUCT_NAME "Widget Maker"
  !define PRODUCT_VERSION "v12.3"
  !define PRODUCT_PUBLISHER "ACME CO"
  !define PRODUCT_WEB_SITE "www.acme.com"
  !define PRODUCT_COPYRIGHT "Copyright 2013 ACME"
!endif

我在整个脚本中使用这些定义。

我遇到的问题是,即使在命令行上定义了 COMPANY_X,执行也会传递到第二个定义块 (ACME)。

作为 NSIS 的新手,我确信有更好的方法来处理这个问题。我还想使用 switch 语句来定义多个公司。如果我这样做,编译器会警告我需要将此代码放在一个部分或函数中。

可能使解决方案复杂化的一件事是,我正在使用两遍过程签署我的 uinstaller: http://nsis.sourceforge.net/Signing_an_Uninstaller

向 NSIS 团队和所有贡献者致敬。我绝不会回到 InstallShield。

提前感谢您的帮助。

【问题讨论】:

    标签: command-line-arguments nsis


    【解决方案1】:

    !ifdef ${COMPANY_X} 实际上是要检查1 是否已定义!

    语法是!ifdef name_of_define:!ifdef COMPANY_X

    ...或者如果定义的内容很重要:!if ${COMPANY_X} = 1

    【讨论】:

    • 知道如何使用交换机定义超过 2 家公司,但仍将它们作为全局变量放在我的 NSI 顶部吗?如果我在 else 中嵌入 ifdef 语句,我会收到多个“PRODUCT_NAME 不存在”错误。
    • 我不明白你的意思,但我相信你能想出一些办法。看看pastebin.com/xJNHwRbb
    • 感谢您的提示。我能够使用 !ifndef 做我想做的事。代码有点难看,但它可以工作。很酷的东西!
    猜你喜欢
    • 2017-08-03
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多