使用NSIS命令行全局定义产品定义

时间:2013-03-30 03:57:55

标签: command-line-arguments nsis

我想通过将参数传递给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。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

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

语法为!ifdef name_of_define:!ifdef COMPANY_X

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

相关问题