【问题标题】:parsing command line arguments with NSIS FileFunc.nsh gets incorrect values使用 NSIS FileFunc.nsh 解析命令行参数得到不正确的值
【发布时间】:2014-01-07 08:46:36
【问题描述】:

我有一个 NSIS 脚本,其中包含用于解析名为“GUID”的命令行参数的代码:

!include FileFunc.nsh
...
${GetParameters} $R0
ClearErrors
${GetOptions} $R0 '/GUID=' $guid

它试图解析的值是一个 GUID:一个 16 位十六进制数字,用连字符分隔每个 4 个字符块。所以命令行看起来像这样:

myprogram.exe /S /GUID=8a97-7c4f-09b7-a856-96e3

问题是这段代码返回了一个看起来有点随机的值,它不是来自命令行的 guid 值。我做了一些实验,确定如果我传入一个纯整数,则可以解析该参数,但如果命令行参数包含连字符或字母,则值是错误的。

【问题讨论】:

    标签: windows command-line-arguments nsis


    【解决方案1】:

    我无法使用 NSIS v2.46 重现此问题:

    !include FileFunc.nsh
    !include LogicLib.nsh
    var guid
    
    Section
    ${GetParameters} $R0
    ClearErrors
    ${GetOptions} $R0 '/GUID=' $guid
    ${If} ${Errors}
            ExecWait '"$exepath" /S /GUID=8a97-7c4f-09b7-a856-96e3'
    ${Else}
            Messagebox mb_ok |$guid|
    ${EndIf}
    SectionEnd
    

    【讨论】:

    • 看来这可能与UAC有关。显然,使用 UAC 插件以提升权限运行的安装程序不会使用命令行参数执行。是这样吗?如果是这样,是否有解决方法?
    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2021-11-05
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多