我想通过将参数传递给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。
提前感谢您的帮助。
答案 0 :(得分:3)
!ifdef ${COMPANY_X}
实际上是要检查是否定义了1
!
语法为!ifdef name_of_define:!ifdef COMPANY_X
...或者如果定义的内容很重要:!if ${COMPANY_X} = 1