基于文件存在的NSIS脚本条件编译

基于文件存在的NSIS脚本条件编译,nsis,Nsis,我有一个基于NSIS的安装程序,我需要能够在不同的条件下生成稍微不同的版本 这些条件在编译时很容易建立,如果磁盘上存在特定的文件,则可以使用替代标记。我知道我可以使用makensis.exe的命令行选项来提供这种行为,但是如果编译器能帮我解决这个问题就更好了 有没有一种方法可以生成编译时“IfExist”类型的逻辑?我没有关于编译时文件检测的一般问题的答案,但我确实有一个解决方案,可以解决您试图实现的问题 我的安装人员使用如下内容: 在CustomBranding.nsh文件中: !define

我有一个基于NSIS的安装程序,我需要能够在不同的条件下生成稍微不同的版本

这些条件在编译时很容易建立,如果磁盘上存在特定的文件,则可以使用替代标记。我知道我可以使用makensis.exe的命令行选项来提供这种行为,但是如果编译器能帮我解决这个问题就更好了


有没有一种方法可以生成编译时“IfExist”类型的逻辑?

我没有关于编译时文件检测的一般问题的答案,但我确实有一个解决方案,可以解决您试图实现的问题

我的安装人员使用如下内容:

在CustomBranding.nsh文件中:

!define CUSTOM_BRANDING
!define APPNAME "Brand X"
!define LOGO "C:\Brand_X_Logo.png"
在主安装程序脚本中:

!include /NONFATAL "CustomBranding.nsh"
!ifndef CUSTOM_BRANDING
    !define APPNAME "Generic"
    !define LOGO "C:\Generic_Logo.png"
!endif
这就是你要问的那种“另类品牌”吗

!macro CompileTimeIfFileExist path define
!tempfile tmpinc
!system 'IF EXIST "${path}" echo !define ${define} > "${tmpinc}"'
!include "${tmpinc}"
!delfile "${tmpinc}"
!undef tmpinc
!macroend

Section 
!insertmacro CompileTimeIfFileExist "$%windir%\explorer.exe" itsThere
!ifdef itsThere
MessageBox mb_Topmost yes
!else
MessageBox mb_Topmost no
!endif
SectionEnd

注意:这个!此处使用的系统命令假定您是在windows上编译的

好吧,在我的例子中,品牌是针对产品而不是安装程序的,尽管我可以了解如何使用您的机制。明天回到办公室后,我会试试你的解决方案,看看安德的解决方案。使用Windows的限制对我来说是可以接受的。明天我会带着你的密码和凯尔的密码去兜风。谢谢