Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support additional arguments as well as overridden arguments #239

Closed
gmckeown opened this issue May 20, 2020 · 13 comments
Closed

Support additional arguments as well as overridden arguments #239

gmckeown opened this issue May 20, 2020 · 13 comments
Labels
Issue-Feature This is a feature request for the Windows Package Manager client.
Milestone

Comments

@gmckeown
Copy link

gmckeown commented May 20, 2020

Description of the new feature/enhancement

Some installers, for example WinSCP, pop up a dialog asking whether I wish to install for current user or all users (note: #149 might be relevant for this specific case).

WinSCP supports the /ALLUSERS and /CURRENTUSER options to cater for this; however, if I use --override it clears all options specified in the manifest and replaces them. So the following ends up performing an interactive install:

winget install --override "/ALLUSERS" winscp

So I locate the manifest, identify that it has the /VERYSILENT option and change my command to:

winget install --override "/VERYSILENT /ALLUSERS" winscp

This achieves what I want -- a completely silent install with my chosen option.

Proposed technical implementation details (optional)

A new switch that adds the listed arguments to the installer command-line rather than replaces them. This would supplement the --override option rather than replacing it.

Something along the lines of the following would then allow me to retain the manifest-specified default options, whilst still including my choices:

winget install --pass-args "/ALLUSERS" winscp

They key benefit here is that if the authors of the manifest add new default options, I don't have to manually modify my install command to match.

@gmckeown gmckeown added the Issue-Feature This is a feature request for the Windows Package Manager client. label May 20, 2020
@RehanSaeed
Copy link

I would like to see custom install arguments for each app when I do:

> winget install Microsoft.VisualStudio --help
> --python - Installs python
> --Node - Installs Node
> etc....

I would also like a guided installation where the installer UI shows up and I can personally select options and manually hit next, next, next, finish.

> winget install Microsoft.VisualStudio --guided

@iDolmatov
Copy link

I found an opportunity to specify additional attributes in the manifest and in the source code, but this is not fully implemented.
Cannot be started with the described command. You cannot get data from manifest when getting information about a package (winget show) and when polling a command (example winget install TestApp -custom -?).
#1067

@denelon
Copy link
Contributor

denelon commented Jun 2, 2021

@RehanSaeed winget install <package> --interactive should do what you're looking for.

 winget install -?
Windows Package Manager v1.0.11451
Copyright (c) Microsoft Corporation. All rights reserved.

Installs the selected package, either found by searching a configured source or directly from a manifest. By default, the query must case-insensitively match the id, name, or moniker of the package. Other fields can be used by passing their appropriate option.

usage: winget install [[-q] <query>] [<options>]

The following arguments are available:
  -q,--query        The query used to search for a package

The following options are available:
  -m,--manifest     The path to the manifest of the package
  --id              Filter results by id
  --name            Filter results by name
  --moniker         Filter results by moniker
  -v,--version      Use the specified version; default is the latest version
  -s,--source       Find package using the specified source
  --scope           Select install scope (user or machine)
  -e,--exact        Find package using exact match
  -i,--interactive  Request interactive installation; user input may be needed
  -h,--silent       Request silent installation
  --locale          Locale to use (BCP47 format)
  -o,--log          Log location (if supported)
  --override        Override arguments to be passed on to the installer
  -l,--location     Location to install to (if supported)

More help can be found at: https://aka.ms/winget-command-install

@iDolmatov
Copy link

@RehanSaeed winget install <package> --interactive should do what you're looking for.

This is not what he is asking for. We need a hidden installation, but with the ability to specify parameters.

The existing parameters in the manifest must be saved so that the user does not rewrite them.
The key I mentioned would be quite applicable when you specify additional parameters after this key. If some switches from the "Silent" / "SilentWithProgress" / "Interactive" lines are duplicated with those entered after "Custom", then the duplicated switches are not reused.
Additionally, should be added a "--help-custom" command, which will show the valid parameters based on the data from the manifest. If there is no data in the manifest, look at the type of the installer and indicate the known switches for this type.

At the moment, none of the moderators and developers have been able to fully explain how the "Custom" switch works. The description of this key explicitly states that it is used for additional parameters. It is not logical if it is automatically added to the required parameters. Either this key is not fully implemented, or there is a bug with its work and lack of description.

@iDolmatov
Copy link

Examples (not real data).
Use
winget install <package> --interactive /custom /D=C:\MyProgram
winget install <package> /custom /D=C:\MyProgram
winget install <package> --scope USER /custom /Portable /D=F:\MyProgram

Help (not real data)
winget install <package> --helpcustom
Answer: /D /F /L=%Location%

@denelon
Copy link
Contributor

denelon commented Jun 2, 2021

@iDolmatov "Custom" switches are passed to the installer regardless of whether it is executed with "Silent", "SilentWithProgress", or "Interactive". The "Custom" switches are optional, and not required. The only time "Silent" and "SilentWithProgress" are required is when you have an .exe installer (not Nullsoft, Inno, or another known "InstallerType") to support those installation modes in the client.

@iDolmatov
Copy link

iDolmatov commented Jun 2, 2021

https://github.com/microsoft/winget-pkgs/tree/master/manifests/a/AIMP/AIMP
Custom: /RUN

What's wrong? Bug?

Try use:
winget install AIMP /custom
winget install AIMP -custom
winget install AIMP --custom

Edit: Shortcut comment needless info.

@denelon
Copy link
Contributor

denelon commented Jun 3, 2021

The "Custom" flags are passed to the installer in addition to the "Silent" or "SilentWithProgress" or "Interactive" depending on what install mode was selected.

For a "Silent" install, the installer would receive /RUN /AUTO /SILENT.
For a "SilentWithProgress" install, the installer would receive /RUN /AUTO.
For an "Interactive" install, the installer would receive /RUN.

@iDolmatov
Copy link

Thank you. Insufficient description of the parameter and its name misled me. Thought it meant another installation mode. It turns out that this is a kind of "ForcedSwitch".

Please indicate which is always used:
https://github.com/microsoft/winget-pkgs/blob/master/Tools/YamlCreate.ps1

https://github.com/microsoft/winget-cli/blob/master/schemas/JSON/manifests/v1.0.0/manifest.installer.1.0.0.json
Custom switches will be passed directly to the installer by winget in any installation mode.

@denelon
Copy link
Contributor

denelon commented Jun 3, 2021

I'm working on another set of documents designed to explain all of the fields fully. I'm also writing more thorough guidance on authoring manifests. The current document is a stub so I can start doing some refactoring on other documents. More to come 😊

@denelon
Copy link
Contributor

denelon commented Jun 25, 2021

@gmckeown we added support for "user" vs. "machine" install. Manifests can have both flavors. We still don't have an additive argument for passing arguments in addition rather than an override, so I'll keep this issue open.

@Trenly
Copy link
Contributor

Trenly commented Jan 13, 2023

@denelon - See above linked PR

@denelon
Copy link
Contributor

denelon commented Feb 21, 2023

All, @Trenly implemented "--custom".

If you pass "--custom" and arguments, they will be added to the existing arguments provided by WinGet and the manifest.

Note: if you use "--override", the "--custom" arguments are ignored.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Issue-Feature This is a feature request for the Windows Package Manager client.
Projects
None yet
Development

No branches or pull requests

5 participants