Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/microsoft/winget-cli/llms.txt

Use this file to discover all available pages before exploring further.

Overview

InstallOptions provides comprehensive control over package installation behavior. These options apply to both InstallPackageAsync and UpgradePackageAsync operations.

Class Definition

runtimeclass InstallOptions
{
    InstallOptions();
    
    // Version selection
    PackageVersionId PackageVersionId;
    
    // Installation behavior
    String PreferredInstallLocation;
    PackageInstallScope PackageInstallScope;
    PackageInstallMode PackageInstallMode;
    String LogOutputPath;
    Boolean AllowHashMismatch;
    String ReplacementInstallerArguments;
    String AdditionalInstallerArguments;
    
    // Metadata
    String CorrelationData;
    String AdditionalPackageCatalogArguments;
    
    // Architecture
    IVector<ProcessorArchitecture> AllowedArchitectures { get; };
    
    // Advanced options
    Boolean AllowUpgradeToUnknownVersion;
    Boolean Force;
    Boolean AcceptPackageAgreements;
    Boolean BypassIsStoreClientBlockedPolicyCheck;
    Boolean SkipDependencies;
    PackageInstallerType InstallerType;
    
    // Authentication
    AuthenticationArguments AuthenticationArguments;
}

Properties

PackageVersionId

PackageVersionId
PackageVersionId
Specifies which version to install. If not set, uses DefaultInstallVersion.
var options = new InstallOptions();

// Install specific version
var versionId = new PackageVersionId()
{
    PackageCatalogId = "winget",
    Version = "1.5.0",
    Channel = ""
};
options.PackageVersionId = versionId;

// Or leave null for latest version
options.PackageVersionId = null; // Uses package.DefaultInstallVersion

PackageInstallScope

PackageInstallScope
PackageInstallScope
Specifies whether to install for current user or system-wide.
Values:
  • Any - Installer determines scope (default)
  • User - Install for current user only
  • System - Install system-wide (requires admin)
  • UserOrUnknown - User or unknown scope allowed
  • SystemOrUnknown - System or unknown scope allowed
var options = new InstallOptions()
{
    PackageInstallScope = PackageInstallScope.User
};

// For system-wide install (requires elevation)
var systemOptions = new InstallOptions()
{
    PackageInstallScope = PackageInstallScope.System
};

PackageInstallMode

PackageInstallMode
PackageInstallMode
Controls installer UI behavior.
Values:
  • Default - Installer’s default experience (may show UI)
  • Silent - Suppress UI where possible
  • Interactive - Show full installer UI
// Silent installation (no UI)
var options = new InstallOptions()
{
    PackageInstallMode = PackageInstallMode.Silent
};

// Interactive installation
var interactiveOptions = new InstallOptions()
{
    PackageInstallMode = PackageInstallMode.Interactive
};

PreferredInstallLocation

PreferredInstallLocation
String
Alternate installation location (if supported by installer).
var options = new InstallOptions()
{
    PreferredInstallLocation = @"D:\Programs\MyApp"
};

// Note: Not all installers support custom locations

LogOutputPath

LogOutputPath
String
Path to write installation log file.
var logPath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
    "WinGet", "Logs", $"install-{DateTime.Now:yyyyMMdd-HHmmss}.log"
);

var options = new InstallOptions()
{
    LogOutputPath = logPath
};

Console.WriteLine($"Install log will be written to: {logPath}");

AllowHashMismatch

AllowHashMismatch
Boolean
default:"false"
Continue installation even if installer hash doesn’t match catalog.
Use with caution. Hash mismatches may indicate corrupted or tampered installers.
// Only use when absolutely necessary
var options = new InstallOptions()
{
    AllowHashMismatch = true
};

ReplacementInstallerArguments

ReplacementInstallerArguments
String
Custom arguments that replace default installer arguments.
// Override ALL installer arguments
var options = new InstallOptions()
{
    ReplacementInstallerArguments = "/S /D=C:\\CustomPath"
};

// Equivalent to: winget install --override "/S /D=C:\CustomPath"

AdditionalInstallerArguments

AdditionalInstallerArguments
String
Additional arguments appended to default installer arguments.
// Add to default arguments
var options = new InstallOptions()
{
    AdditionalInstallerArguments = "/NORESTART /LOG=install.log"
};

// Equivalent to: winget install --custom "/NORESTART /LOG=install.log"

AcceptPackageAgreements

AcceptPackageAgreements
Boolean
default:"false"
Automatically accept package agreements and license terms.
var options = new InstallOptions()
{
    AcceptPackageAgreements = true
};

// Check agreements before accepting
var package = match.CatalogPackage;
var version = package.DefaultInstallVersion;
var metadata = version.GetCatalogPackageMetadata();

if (metadata.Agreements.Count > 0)
{
    Console.WriteLine("Package requires accepting agreements:");
    foreach (var agreement in metadata.Agreements)
    {
        Console.WriteLine($"- {agreement.Label}");
        Console.WriteLine($"  {agreement.Text}");
        Console.WriteLine($"  URL: {agreement.Url}");
    }
    
    // User confirms acceptance
    options.AcceptPackageAgreements = true;
}

AllowedArchitectures

AllowedArchitectures
IVector<ProcessorArchitecture>
Allowed architectures in preference order.
using Windows.System;

var options = new InstallOptions();

// Prefer ARM64, fall back to x64
options.AllowedArchitectures.Clear();
options.AllowedArchitectures.Add(ProcessorArchitecture.Arm64);
options.AllowedArchitectures.Add(ProcessorArchitecture.X64);

// Or prefer native architecture
var arch = Package.Current.Id.Architecture;
options.AllowedArchitectures.Add(arch);

Force

Force
Boolean
default:"false"
Force installation, bypassing non-security related checks.
var options = new InstallOptions()
{
    Force = true // Override non-critical failures
};

SkipDependencies

SkipDependencies
Boolean
default:"false"
Skip installing package dependencies.
var options = new InstallOptions()
{
    SkipDependencies = true
};

// Install only the main package, not dependencies

InstallerType

InstallerType
PackageInstallerType
Force specific installer type when multiple are available.
Common values:
  • Unknown - Auto-detect
  • Msix - MSIX/AppX installer
  • Msi - MSI installer
  • Exe - Executable installer
  • Inno - Inno Setup
  • Nullsoft - NSIS installer
  • Wix - WiX installer
  • Burn - WiX Burn bundle
  • Portable - Portable application
var options = new InstallOptions()
{
    InstallerType = PackageInstallerType.Msi
};

// Force MSI installer if multiple types available

AllowUpgradeToUnknownVersion

AllowUpgradeToUnknownVersion
Boolean
default:"false"
Allow upgrading to packages with unknown version.
var options = new InstallOptions()
{
    AllowUpgradeToUnknownVersion = true
};

// Used for upgrade operations when version comparison isn't possible

CorrelationData

CorrelationData
String
JSON-encoded correlation data returned in result.
using System.Text.Json;

var correlationData = new
{
    SessionId = Guid.NewGuid().ToString(),
    UserId = "user123",
    Timestamp = DateTime.UtcNow
};

var options = new InstallOptions()
{
    CorrelationData = JsonSerializer.Serialize(correlationData)
};

var result = await manager.InstallPackageAsync(package, options);

// Retrieve correlation data from result
Console.WriteLine($"Correlation: {result.CorrelationData}");

AuthenticationArguments

AuthenticationArguments
AuthenticationArguments
Authentication arguments for package download.
var authArgs = new AuthenticationArguments()
{
    AuthenticationMode = AuthenticationMode.SilentPreferred,
    AuthenticationAccount = "user@contoso.com"
};

var options = new InstallOptions()
{
    AuthenticationArguments = authArgs
};

// Used when downloading from authenticated sources

Common Scenarios

Silent Installation

var options = new InstallOptions()
{
    PackageInstallMode = PackageInstallMode.Silent,
    AcceptPackageAgreements = true,
    PackageInstallScope = PackageInstallScope.User
};

System-Wide Installation with Logging

var options = new InstallOptions()
{
    PackageInstallMode = PackageInstallMode.Silent,
    PackageInstallScope = PackageInstallScope.System,
    LogOutputPath = @"C:\Logs\install.log",
    AcceptPackageAgreements = true
};

// Requires administrator privileges

Custom Install Location

var options = new InstallOptions()
{
    PreferredInstallLocation = @"D:\Apps\MyApplication",
    PackageInstallMode = PackageInstallMode.Silent,
    AdditionalInstallerArguments = "/NORESTART"
};

// Note: Not all installers support custom locations

Upgrade with Version Control

var options = new InstallOptions()
{
    PackageInstallMode = PackageInstallMode.Silent,
    AllowUpgradeToUnknownVersion = true,
    Force = true,
    LogOutputPath = Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
        "Logs", $"upgrade-{DateTime.Now:yyyyMMdd-HHmmss}.log"
    )
};

var result = await manager.UpgradePackageAsync(package, options);

Development/Testing Installation

var options = new InstallOptions()
{
    PackageInstallMode = PackageInstallMode.Silent,
    AllowHashMismatch = true, // Allow testing pre-release builds
    Force = true,
    SkipDependencies = false,
    LogOutputPath = @"C:\Dev\Logs\install.log"
};

Build docs developers (and LLMs) love