代码之家  ›  专栏  ›  技术社区  ›  Koenigsberg

在NSIS中正确调用WriteRegMultiStr

  •  0
  • Koenigsberg  · 技术社区  · 7 年前

    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"

    因为没有关于这个特定函数的文档,这个函数是后来添加的,很久以后 WriteRegStr WriteRegDWORD 有空的话,我想知道-怎么用?

    REG_MULTI_SZ 值我只找到使用注册表NSIS-plugin的指令。但是这个函数是存在的,所以如何使用它呢?

    附录:

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

    0 回复  |  直到 7 年前
        1
  •  1
  •   Anders    7 年前

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

    此指令以这种方式工作的原因是,它实际上与 WriteRegBin 在引擎盖下,很少添加代码来支持这个新功能。

    /REGEDIT5

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

        2
  •  0
  •   Koenigsberg    7 年前

    开场白中描述的命令结构基本正确,但必须对值进行精确编码。我的命令如下:

    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 Version 5.0格式,而不是REGEDIT4格式。转换编辑器可以用来实现这一点,我用了otconverit。