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 }