winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

WinGetUtilWrapper.cs (16036B)


      1 // -----------------------------------------------------------------------------
      2 // <copyright file="WinGetUtilWrapper.cs" company="Microsoft Corporation">
      3 //     Copyright (c) Microsoft Corporation. Licensed under the MIT License.
      4 // </copyright>
      5 // -----------------------------------------------------------------------------
      6 
      7 namespace AppInstallerCLIE2ETests.WinGetUtil
      8 {
      9     using System;
     10     using System.Runtime.InteropServices;
     11 
     12     /// <summary>
     13     /// Wrapper class for WinGetUtil exports.
     14     /// For more details about methods in this class visit WinGetUtil.h file.
     15     /// </summary>
     16     public class WinGetUtilWrapper
     17     {
     18         private const string DllName = @"WinGetUtil.dll";
     19 
     20         /// <summary>
     21         /// Create manifest flags.
     22         /// </summary>
     23         [Flags]
     24         public enum CreateManifestOption
     25         {
     26             /// <summary>
     27             /// No validation.
     28             /// </summary>
     29             NoValidation = 0,
     30 
     31             /// <summary>
     32             /// Schema validation.
     33             /// </summary>
     34             SchemaValidation = 0x1,
     35 
     36             /// <summary>
     37             /// Schema and semantic validation.
     38             /// </summary>
     39             SchemaAndSemanticValidation = 0x2,
     40 
     41             /// <summary>
     42             /// Return error on verified publisher.
     43             /// </summary>
     44             ReturnErrorOnVerifiedPublisherFields = 0x1000,
     45         }
     46 
     47         /// <summary>
     48         /// Validate manifests results.
     49         /// </summary>
     50         [Flags]
     51         public enum ValidateManifestResultCode
     52         {
     53             /// <summary>
     54             /// Success.
     55             /// </summary>
     56             Success = 0,
     57 
     58             /// <summary>
     59             /// Dependencies validation failure.
     60             /// </summary>
     61             DependenciesValidationFailure = 0x1,
     62 
     63             /// <summary>
     64             /// Arp version validation failure.
     65             /// </summary>
     66             ArpVersionValidationFailure = 0x2,
     67 
     68             /// <summary>
     69             /// Installer validation failure.
     70             /// </summary>
     71             InstallerValidationFailure = 0x4,
     72 
     73             /// <summary>
     74             /// Single manifest package has dependencies.
     75             /// </summary>
     76             SingleManifestPackageHasDependencies = 0x10000,
     77 
     78             /// <summary>
     79             /// Multi manifest package has dependencies.
     80             /// </summary>
     81             MultiManifestPackageHasDependencies = 0x20000,
     82 
     83             /// <summary>
     84             /// Missing manifest dependencies.
     85             /// </summary>
     86             MissingManifestDependenciesNode = 0x40000,
     87 
     88             /// <summary>
     89             /// No suitable min version dependencies.
     90             /// </summary>
     91             NoSuitableMinVersionDependency = 0x80000,
     92 
     93             /// <summary>
     94             /// Found dependency loop.
     95             /// </summary>
     96             FoundDependencyLoop = 0x100000,
     97 
     98             /// <summary>
     99             /// Internal error.
    100             /// </summary>
    101             InternalError = 0x1000,
    102         }
    103 
    104         /// <summary>
    105         /// ValidateManifestOptionV2 flags.
    106         /// </summary>
    107         [Flags]
    108         public enum ValidateManifestOptionV2
    109         {
    110             /// <summary>
    111             /// None.
    112             /// </summary>
    113             None = 0,
    114 
    115             /// <summary>
    116             /// Dependencies validation.
    117             /// </summary>
    118             DependenciesValidation = 0x1,
    119 
    120             /// <summary>
    121             /// Arp version validation.
    122             /// </summary>
    123             ArpVersionValidation = 0x2,
    124 
    125             /// <summary>
    126             /// Installer validation.
    127             /// </summary>
    128             InstallerValidation = 0x4,
    129         }
    130 
    131         /// <summary>
    132         /// Validate manifest operation type.
    133         /// </summary>
    134         public enum ValidateManifestOperationType
    135         {
    136             /// <summary>
    137             /// Add.
    138             /// </summary>
    139             Add = 0,
    140 
    141             /// <summary>
    142             /// Update.
    143             /// </summary>
    144             Update = 1,
    145 
    146             /// <summary>
    147             /// Delete.
    148             /// </summary>
    149             Delete = 2,
    150         }
    151 
    152         /// <summary>
    153         /// Begin installer metadata collection options.
    154         /// </summary>
    155         public enum WinGetBeginInstallerMetadataCollectionOptions
    156         {
    157             /// <summary>
    158             /// None.
    159             /// </summary>
    160             WinGetBeginInstallerMetadataCollectionOption_None = 0,
    161 
    162             /// <summary>
    163             /// Input is file path.
    164             /// </summary>
    165             WinGetBeginInstallerMetadataCollectionOption_InputIsFilePath = 0x1,
    166 
    167             /// <summary>
    168             /// Input is URI.
    169             /// </summary>
    170             WinGetBeginInstallerMetadataCollectionOption_InputIsURI = 0x2,
    171         }
    172 
    173         /// <summary>
    174         /// Complete installer metadata collection.
    175         /// </summary>
    176         public enum WinGetCompleteInstallerMetadataCollectionOptions
    177         {
    178             /// <summary>
    179             /// None.
    180             /// </summary>
    181             WinGetCompleteInstallerMetadataCollectionOption_None = 0,
    182 
    183             /// <summary>
    184             /// Abandon.
    185             /// </summary>
    186             WinGetCompleteInstallerMetadataCollectionOption_Abandon = 0x1,
    187         }
    188 
    189         /// <summary>
    190         /// Merge installer metadata.
    191         /// </summary>
    192         public enum WinGetMergeInstallerMetadataOptions
    193         {
    194             /// <summary>
    195             /// None.
    196             /// </summary>
    197             WinGetMergeInstallerMetadataOptions_None = 0,
    198         }
    199 
    200         /// <summary>
    201         /// WinGetCompareVersion from wingetutil.dll .
    202         /// </summary>
    203         /// <param name="version1">Version.</param>
    204         /// <param name="version2">Other version.</param>
    205         /// <param name="comparisonResult">Result of comparison.</param>
    206         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    207         public static extern void WinGetCompareVersions(string version1, string version2, [MarshalAs(UnmanagedType.U4)] out int comparisonResult);
    208 
    209         /// <summary>
    210         /// WinGetDownload from wingetutil.dll .
    211         /// </summary>
    212         /// <param name="url">Url.</param>
    213         /// <param name="filePath">File path where to download.</param>
    214         /// <param name="sha256Hash">SHA256 hash.</param>
    215         /// <param name="sha256HashLength">SHA256 hash length.</param>
    216         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    217         public static extern void WinGetDownload(string url, string filePath, [MarshalAs(UnmanagedType.LPArray)] byte[] sha256Hash, uint sha256HashLength);
    218 
    219         /// <summary>
    220         /// WinGetLoggingInit from wingetutil.dll .
    221         /// </summary>
    222         /// <param name="logPath">Log path.</param>
    223         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    224         public static extern void WinGetLoggingInit(string logPath);
    225 
    226         /// <summary>
    227         /// WinGetLoggingTerm from wingetutil.dll .
    228         /// </summary>
    229         /// <param name="logPath">Log path.</param>
    230         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    231         public static extern void WinGetLoggingTerm(string logPath);
    232 
    233         /// <summary>
    234         /// WinGetCreateManifest from wingetutil.dll .
    235         /// </summary>
    236         /// <param name="inputPath">Input path.</param>
    237         /// <param name="succeeded">Succeeded.</param>
    238         /// <param name="manifestHandle">Manifest handle.</param>
    239         /// <param name="failureMessage">Failure message.</param>
    240         /// <param name="mergedManifestPath">Merge manifest path.</param>
    241         /// <param name="option">Option.</param>
    242         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    243         public static extern void WinGetCreateManifest(
    244             string inputPath,
    245             [MarshalAs(UnmanagedType.U1)] out bool succeeded,
    246             out IntPtr manifestHandle,
    247             [MarshalAs(UnmanagedType.BStr)] out string failureMessage,
    248             string mergedManifestPath,
    249             CreateManifestOption option);
    250 
    251         /// <summary>
    252         /// WinGetCloseManifest from wingetutil.dll .
    253         /// </summary>
    254         /// <param name="manifest">Manifest.</param>
    255         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    256         public static extern void WinGetCloseManifest(IntPtr manifest);
    257 
    258         /// <summary>
    259         /// WinGetValidateManifestV3 from wingetutil.dll .
    260         /// </summary>
    261         /// <param name="manifestHandle">Manifest handle.</param>
    262         /// <param name="indexHandle">Index handle.</param>
    263         /// <param name="result">Result.</param>
    264         /// <param name="failureMessage">Failure message.</param>
    265         /// <param name="option">Option.</param>
    266         /// <param name="operationType">Operation type.</param>
    267         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    268         public static extern void WinGetValidateManifestV3(
    269             IntPtr manifestHandle,
    270             IntPtr indexHandle,
    271             out ValidateManifestResultCode result,
    272             [MarshalAs(UnmanagedType.BStr)] out string failureMessage,
    273             ValidateManifestOptionV2 option,
    274             ValidateManifestOperationType operationType);
    275 
    276         /// <summary>
    277         /// WinGetSQLiteIndexCreate from wingetutil.dll .
    278         /// </summary>
    279         /// <param name="filePath">File path.</param>
    280         /// <param name="majorVersion">Major version.</param>
    281         /// <param name="minorVersion">Minor version.</param>
    282         /// <param name="index">Index.</param>
    283         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    284         public static extern void WinGetSQLiteIndexCreate(string filePath, uint majorVersion, uint minorVersion, out IntPtr index);
    285 
    286         /// <summary>
    287         /// WinGetSQLiteIndexOpen from wingetutil.dll .
    288         /// </summary>
    289         /// <param name="filePath">File path.</param>
    290         /// <param name="index">Index.</param>
    291         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    292         public static extern void WinGetSQLiteIndexOpen(string filePath, out IntPtr index);
    293 
    294         /// <summary>
    295         /// WinGetSQLiteIndexClose from wingetutil.dll .
    296         /// </summary>
    297         /// <param name="index">Index.</param>
    298         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    299         public static extern void WinGetSQLiteIndexClose(IntPtr index);
    300 
    301         /// <summary>
    302         /// WinGetSQLiteIndexAddManifest from wingetutil.dll .
    303         /// </summary>
    304         /// <param name="index">Index.</param>
    305         /// <param name="manifestPath">Manifest path.</param>
    306         /// <param name="relativePath">Relative path.</param>
    307         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    308         public static extern void WinGetSQLiteIndexAddManifest(IntPtr index, string manifestPath, string relativePath);
    309 
    310         /// <summary>
    311         /// WinGetSQLiteIndexUpdateManifest from wingetutil.dll .
    312         /// </summary>
    313         /// <param name="index">Index.</param>
    314         /// <param name="manifestPath">Manifest path.</param>
    315         /// <param name="relativePath">Relative path.</param>
    316         /// <param name="indexModified">Index modified.</param>
    317         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    318         public static extern void WinGetSQLiteIndexUpdateManifest(
    319             IntPtr index,
    320             string manifestPath,
    321             string relativePath,
    322             [MarshalAs(UnmanagedType.U1)] out bool indexModified);
    323 
    324         /// <summary>
    325         /// WinGetSQLiteIndexRemoveManifest from wingetutil.dll .
    326         /// </summary>
    327         /// <param name="index">Index.</param>
    328         /// <param name="manifestPath">Manifest path.</param>
    329         /// <param name="relativePath">Relative path.</param>
    330         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    331         public static extern void WinGetSQLiteIndexRemoveManifest(IntPtr index, string manifestPath, string relativePath);
    332 
    333         /// <summary>
    334         /// WinGetSQLiteIndexPrepareForPackaging from wingetutil.dll .
    335         /// </summary>
    336         /// <param name="index">Index.</param>
    337         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    338         public static extern void WinGetSQLiteIndexPrepareForPackaging(IntPtr index);
    339 
    340         /// <summary>
    341         /// WinGetSQLiteIndexCheckConsistency from wingetutil.dll .
    342         /// </summary>
    343         /// <param name="index">Index.</param>
    344         /// <param name="succeeded">Succeeded.</param>
    345         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    346         public static extern void WinGetSQLiteIndexCheckConsistency(IntPtr index, [MarshalAs(UnmanagedType.U1)] out bool succeeded);
    347 
    348         /// <summary>
    349         /// WinGetBeginInstallerMetadataCollection from wingetutil.dll .
    350         /// </summary>
    351         /// <param name="inputJSON">Input json.</param>
    352         /// <param name="logFilePath">Log file path.</param>
    353         /// <param name="options">Options.</param>
    354         /// <param name="collectionHandle">Collection handle.</param>
    355         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    356         public static extern void WinGetBeginInstallerMetadataCollection(
    357             string inputJSON,
    358             string logFilePath,
    359             WinGetBeginInstallerMetadataCollectionOptions options,
    360             out IntPtr collectionHandle);
    361 
    362         /// <summary>
    363         /// WinGetCompleteInstallerMetadataCollection from wingetutil.dll .
    364         /// </summary>
    365         /// <param name="collectionHandle">Collection handle.</param>
    366         /// <param name="outputFilePath">Output file path.</param>
    367         /// <param name="options">Options.</param>
    368         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    369         public static extern void WinGetCompleteInstallerMetadataCollection(
    370             IntPtr collectionHandle,
    371             string outputFilePath,
    372             WinGetCompleteInstallerMetadataCollectionOptions options);
    373 
    374         /// <summary>
    375         /// WinGetMergeInstallerMetadata from wingetutil.dll .
    376         /// </summary>
    377         /// <param name="inputJSON">Input json.</param>
    378         /// <param name="outputJSON">Output json.</param>
    379         /// <param name="maximumOutputSizeInBytes">Maximum output size in bytes.</param>
    380         /// <param name="logFilePath">Log file path.</param>
    381         /// <param name="options">Options.</param>
    382         [DllImport(DllName, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode, PreserveSig = false)]
    383         public static extern void WinGetMergeInstallerMetadata(
    384             string inputJSON,
    385             [MarshalAs(UnmanagedType.BStr)] out string outputJSON,
    386             uint maximumOutputSizeInBytes,
    387             string logFilePath,
    388             WinGetMergeInstallerMetadataOptions options);
    389     }
    390 }