【问题标题】:How do I pass parameters to the installer in a Chocolatey package?如何将参数传递给 Chocolatey 包中的安装程序?
【发布时间】:2016-06-14 05:50:23
【问题描述】:

我从 MSI 创建了一个包。但是,我需要传入自定义参数。

/i SERVER='xx.yyy.com

这是我通过阅读 choco 命令规范尝试的几件事,但都没有奏效。

> choco install foo -y --params "SERVER='xx.yyy.com'"
> choco install foo -y --params "SERVER=xx.yyy.com"
> choco install foo -y --params "SERVER= xx.yyy.com"

如何将安装选项传递给安装程序?

【问题讨论】:

    标签: chocolatey


    【解决方案1】:

    如果您要传递给本机安装程序,请使用--install-arguments 而不是--package-parameters

    https://chocolatey.org/docs/commands-install#options-and-switches

     --ia, --installargs, --installarguments, --install-arguments=VALUE
     InstallArguments - Install Arguments to pass to the native installer in 
       the package. Defaults to unspecified.
    
    -o, --override, --overrideargs, --overridearguments, --override-arguments
     OverrideArguments - Should install arguments be used exclusively without 
       appending to current package passed arguments? Defaults to false.
    
     --params, --parameters, --pkgparameters, --packageparameters, --package-parameters=VALUE
     PackageParameters - Parameters to pass to the package. Defaults to 
       unspecified.
    

    此外,您可能想了解有关如何传递选项和开关的文档 - https://chocolatey.org/docs/commands-reference#how-to-pass-options-switches

    • 引用值:当您需要引用整个参数时,例如何时 使用空格,请使用双引号和 撇号 ("'value'")。在 cmd.exe 你可以只使用双引号 ("value") 但在 powershell.exe 中你应该使用反引号 (`"value`") 或撇号 ('value')。使用组合允许两者 shell 可以正常工作,下一节除外 适用。
    • 在参数中传递引号:当您需要传递引号时 值到像本机安装程序这样的东西,你是在 乐趣的世界。在 cmd.exe 中,您必须像这样传递它:-ia "/yo=""Spaces spaces"""。在 PowerShell.exe 中,您必须像这样传递它 这个:-ia '/yo=""Spaces spaces""'。没有其他组合会起作用。在 PowerShell.exe 如果您使用的是 v3+ 版本,您可以在 -ia 之前尝试 --% 只是按原样传递参数,这意味着它不应该 需要任何特殊的解决方法。

    【讨论】:

    • 他们确实应该将此作为手册页中的示例之一
    • @pcnate 这是个好主意。我添加了一个增强请求。如果我对你的意思有异议,请告诉我 - github.com/chocolatey/choco/issues/1717
    • 这是一个很好的解释,但我认为大多数人正在寻找的只是一个例子。
    • --install-arguments 的语法格式是什么?例如。是 'CUSTOMARGUMENT=""' 还是 '/CUSTOMARGUMENT:""' 等等等等。一些例子会很有用。
    • @YM_coding 语法是本机安装程序所期望的。因此,对于 MSI 属性,您将使用 CAPITAL_LETTERS="Value" NEXTPROPERTY="Value2" 等等。对于其他安装程序,他们有不同的要求。安装程序参数取决于“安装程序”本身,因此它们会有所不同。注意包参数是不同的,它们在 Chocolatey 中更通用,因此更容易为其提供语法。
    【解决方案2】:

    我发现很难找到有关在 Choco 包参数中设置值的信息!

    choco install -h 没有多大帮助。

    作为一个为包参数设置值的简单示例(与 MSI 参数相反 - 这是完全不同的),下面是一个简单可行的示例:

    choco install python2 --package-parameters='"/InstallDir:D:\Python2"'
    

    “/InstallDir”被记录为“python2”Choco 包的包参数。

    请注意,“--package-parameters”有几个别名,如果您想节省输入,最短的是“--params”。

    还要注意在赋值时使用冒号,而不是“=”。

    如果值中需要空格,请用额外的双引号将值括起来 - 即需要四个新字符。

    ...我已在 Choco 论坛上要求改进文档。

    【讨论】:

    • “我已要求 choco 论坛改进文档。”哈哈,我同意,他们的文档很糟糕。
    • 值得注意的是,当 Chocolatey 原生提供包参数时,我们确保您可以传递 := 作为包参数的键值分隔符。我们希望围绕这一点使文档变得更好。 docs.chocolatey.org/en-us/guides/create/…
    【解决方案3】:

    补充:在 PowerShell 变量中使用 --param 参数传递给安装程序,例如

    choco install vscode $ParVar
    

    仅当您在 --params ... 之后包含等号 =(而不是空格)时,这才起作用。 大多数包文档显示它没有等号!虽然这不是直接执行的问题,但通过变量传递参数时会失败。

    VS Code 的证明:

    没有等号:

    Proceeding Code
    1. VS Code Chocolatey Documentation: | choco install vscode--params "/NoDesktopIcon /NoQuicklaunchIcon"
    2. 复制到变量:| $ParVar = '--params "/NoDesktopIcon /NoQuicklaunchIcon"'
      注意单引号和双引号(见其他答案)。
    3. 执行(-> 错误):| choco install vscode $ParVar

    等号:

    Proceeding Code
    2. Copy to variable: $ParVar = '--params="/NoDesktopIcon /NoQuicklaunchIcon"'
    Pay attention to = sign after params
    3. Execution (-> success): choco install vscode $ParVar

    -> 这可以在所有需要params 参数和双引号的包中使用。我用几个包对此进行了测试。

    我利用这种方法构建了很多应用程序的key:value 字典,然后我使用了batch install on new machines

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-04
      • 2011-04-01
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多