在NSIS中正确调用WriteRegMultiStr

时间:2019-05-22 08:31:31

标签: nsis

在NSIS 3.02版本中,增加了WriteRegMultiStr函数。在我的脚本中调用该函数时,脚本会引发错误:

Usage: WriteRegMultiStr /REGEDIT5 rootkey subkey entry_name hex_string_like_660000000000
root_key=(HKCR[32|64]|HKLM[32|64]|HKCU[32|64]|HKU|HKCC|HKDD|HKPD|SHCTX)

呼叫本身如下所示:

WriteRegMultiStr /REGEDIT5 HKLM "System\CurrentControlSet\Services\SomeService" "DependsOnService" "service1 service2"

由于以后没有添加有关此特定功能的文档,因此在WriteRegStrWriteRegDWORD可用很久之后,我不得不怀疑-如何使用它?

到目前为止,相对于输入REG_MULTI_SZ值,我仅发现使用注册表NSIS -plugin的指令。但是该功能存在,如何使用?

附录:

将字符串编码为十六进制,并在不带引号的情况下将其传递给ot,也不会产生预期的结果。

2 个答案:

答案 0 :(得分:1)

您发现,值数据的格式必须与Windows 2000+中的.reg文件完全相同。

此指令如此工作的原因是,它实际上与WriteRegBin相同,并且添加了很少的代码来支持此新功能。

将来,您也许可以放下/REGEDIT5开关,并为其提供纯字符串,但尚未添加对此项的支持。

Registry plug-in确实允许您以理智的方式编写这些字符串。

答案 1 :(得分:0)

在深入浏览互联网后,我实际上能够找到答案。由于我认为在StackOverflow上尚未解决此问题,因此,如果有人要使用此功能,我将在此处留下答复。

开头文章中描述的命令结构基本上是正确的,但是必须精确编码该值。我的命令如下所示:

WriteRegMultiStr /REGEDIT5 HKLM "System\CurrentControlSet\Services\SomeService" "DependsOnService" 54,00,63,00,70,00,69,00,70,00,00,00,41,00,66,00,64

对于打算测试此字符串的任何人,这都是

Tcpip
Afd

以十六进制regedit格式编码。确切地说,这是Regedit版本5.0格式,而不是REGEDIT4格式。可以使用转换编辑器来实现这一点,我使用了OTConvertIt。

假设您运行的是NSIS 3.02或更高版本,然后应编译脚本。