2

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

提前致谢。

4

4 回答 4

5

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

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

于 2013-03-20T08:16:49.447 回答
1

您可以使用!define传递一些可在编译时使用的值。例如,假设您在 nsis 源文件中有此代码:

!define PATHTOFILE "C:\thisfilewillbedeleted.ext"
Delete $PATHTOFILE

如果你想在编译时改变这个值,你可以用这种方式调用 nsis:

makensis /DPATHTOFILE="C:\otherfiletodelete.ext"

[编辑]

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

于 2013-03-20T08:16:32.003 回答
1

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

!define /file OPTIONS json.txt

它将使用 json.txt 的内容定义 OPTIONS。

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

于 2013-03-20T12:44:14.910 回答
1

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

例子 :

# 在 filename.cpp 中搜索一行 '#define APP_VERSION "2.5"' 并将 ${VER_MAJOR} 设置为 2,${VER_MINOR} 设置为 5。

!searchparse /file filename.cpp `#define APP_VERSION "` VER_MAJOR `.` VER_MINOR `"`

于 2015-07-30T10:00:08.967 回答