NSIS:在编译时从文件中读取

NSIS:在编译时从文件中读取,nsis,compile-time,Nsis,Compile Time,在编译nsis脚本时,我想将文件(config.json)中的一些值读入一些变量。 我怎么可能做到呢 提前感谢。您可以使用!定义以传递一些可在编译时使用的值。例如,假设nsis源文件中包含以下代码: !define PATHTOFILE "C:\thisfilewillbedeleted.ext" Delete $PATHTOFILE 如果要在编译时更改此walue,可以通过以下方式调用nsis: makensis /DPATHTOFILE="C:\otherfiletodelete.ext"

在编译nsis脚本时,我想将文件(config.json)中的一些值读入一些变量。 我怎么可能做到呢


提前感谢。

您可以使用
!定义
以传递一些可在编译时使用的值。例如,假设nsis源文件中包含以下代码:

!define PATHTOFILE "C:\thisfilewillbedeleted.ext"
Delete $PATHTOFILE
如果要在编译时更改此walue,可以通过以下方式调用nsis:

makensis /DPATHTOFILE="C:\otherfiletodelete.ext"
[编辑]


如果您得到了使用外部工具生成的*.json文件,并且您必须使用这种文件,我建议您使用一些建筑系统,例如
ant
。您可以创建
build.xml
,它读取、解析json文件中的数据,然后将这些数据写入
*.nsh
文件。我认为这将比在nsis脚本中完成这一切更好、更干净。

代码!include命令可以在nsis脚本中放置任何文件的位置(在编译时)包含该文件。但是包含的文件必须符合nsis语法(例如,它应该
!定义一些值)


!执行
命令可以帮助您:如果您绝对需要处理json文件,您可以编写第三方批处理命令文件来预处理json文件并将其转换为合适的nsis文件。

如果您只需要在运行时解析json文件,您可以使用
!使用
/file
选项定义

!define /file OPTIONS json.txt
它将使用json.txt的内容定义选项


如果您想在编译时使用json文件来更改生成的exe,那么您需要某种预编译器,这就是您实际要做的。

您可以使用!带有/file开关的searchparse命令

例如:

#在filename.cpp中搜索一行“#定义应用程序版本“2.5”,并将${VER_MAJOR}设置为2,${VER_MINOR}设置为5


!!searchparse/file filename.cpp`#定义应用程序版本“`veru MAJOR`.`veru MINOR``

为什么要这样做?给我们举个例子。也许您可以使用一些构建机制来替换这些值,例如
ant
?我只想在编译时从配置文件中读取值,并将其嵌入到exe中,这样我的exe就不依赖于某些外部配置文件。它必须是JSON吗?您无法将其安排为NSIS头文件(
.nsh
,包含
!define XYZ ABC
)或将其传递给编译器(
makensis/DXYZ=ABC
)?或者您是否有其他语言(例如Python),您已经在使用这些语言来实现此目的?@ChrisMorgan json文件是我所做工作的首选。不,我没有使用任何其他语言,只是nsis。我现在正在做的事情与此类似。我正在制作一个
readconfig.exe
(并使用
!execute
)在编译时从脚本执行它),它从
config.json
执行读取工作,并写入一个
config.nsh
,我将其包含在原始nsis脚本中。但是在这种方法中,我必须使用一个额外的
config.exe
,这是我不想要的。所以,寻找其他更好的选择。@smilepleeaz:好吧,这差不多就是你将要得到的。如果这一个对你有帮助,你应该检查它是否有帮助;)