| 1 | <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
| 2 | <html> |
| 3 | <head> |
| 4 | <title>Managed Wrapper Library for Cabinet APIs</title> |
| 5 | <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"> |
| 6 | <link rel="stylesheet" type="text/css" href="MSDN.css"> |
| 7 | </head> |
| 8 | <body id="bodyID" class="dtBODY"> |
| 9 | <div id="nsbanner"> |
| 10 | <div id="bannerrow1"> |
| 11 | <table class="bannerparthead" cellspacing="0" id="Table1"> |
| 12 | <tr id="hdr"> |
| 13 | <td class="runninghead">Managed Libraries for Windows Installer</td> |
| 14 | <td class="product"></td> |
| 15 | </tr> |
| 16 | </table> |
| 17 | </div> |
| 18 | <div id="TitleRow"> |
| 19 | <h1 class="dtH1">Managed Wrapper Library for Cabinet APIs</h1> |
| 20 | </div> |
| 21 | </div> |
| 22 | <div id="nstext"> |
| 23 | <p>This is a managed library that provides the ability to |
| 24 | create and extract cabinet files. It uses cabinet.dll (present on all versions of Windows) |
| 25 | to do the actual compression/decompression. It provides access to nearly all |
| 26 | cabinet capabilities, including spanning of multiple cab files. It even has support for |
| 27 | preserving directory structures and UTF8 paths.</p> |
| 28 | <p>There are two ways to use the library. <a href="ms-its:MMLRef.chm::/Microsoft.Cab.CabinetInfo.html">CabinetInfo</a> |
| 29 | and <a href="ms-its:MMLRef.chm::/Microsoft.Cab.CabinetFileInfo.html">CabinetFileInfo</a> |
| 30 | (similar to DirectoryInfo and FileInfo respectively) |
| 31 | provide high-level object-oriented methods for doing common file-based cabinet creation and |
| 32 | extraction tasks. On the other hand, the <a href="ms-its:MMLRef.chm::/Microsoft.Cab.Cabinet.html">Cabinet</a> |
| 33 | class provides low-level access to all |
| 34 | functionality, and operates completely in terms of .NET Streams. The previous two classes use |
| 35 | the Cabinet class to do all the actual work.</p> |
| 36 | <p>There are also two ways to build the library. |
| 37 | Compiling it normally will produce the fully functional |
| 38 | library in the <a href="ms-its:MMLRef.chm::/Microsoft.Cab.html">Microsoft.Cab</a> |
| 39 | namespace, while compiling it with the <tt>/D:CABMINIMAL |
| 40 | /D:CABEXTRACTONLY</tt> flags will create a compact assembly with only the core extraction |
| 41 | functionality, in the <a href="ms-its:MMLRef.chm::/Microsoft.Cab.MiniExtract.html">Microsoft.Cab.MiniExtract</a> |
| 42 | namespace.</p> |
| 43 | <p>The cabinet library interops with native cabinet APIs which use the 'cdecl' |
| 44 | calling-convention. When building against .NET Framework versions before 2.0, |
| 45 | this library requires a special post-build step to process the UnmanagedFunctionPointerAttribute. |
| 46 | If you use this code in another assembly, don't forget to run <a href="augmentil.htm">AugmentIL</a> |
| 47 | on it to fix the delegate calling-conventions, otherwise you will encounter a |
| 48 | NullReferenceException when attempting to call the cabinet APIs. When building against |
| 49 | .NET Framework version 2.0 or later, the UnmanagedFunctionPointerAttribute.cs source file |
| 50 | should be omitted.</p> |
| 51 | |
| 52 | <p><br/></p> |
| 53 | <p><b>See also:</b></p> |
| 54 | <ul> |
| 55 | <li><a href="cabs.htm">Working with Cabinet Files</a></li> |
| 56 | <li><a href="ms-its:MMLRef.chm::/Microsoft.Cab.CabinetInfoMethods.html">CabinetInfo Methods</a></li> |
| 57 | <li><a href="ms-its:MMLRef.chm::/Microsoft.Cab.CabinetMethods.html">Cabinet Methods</a></li> |
| 58 | <li><a href="cabpack.htm">CabPack Sample Tool</a></li> |
| 59 | </ul> |
| 60 | <p><br/></p> |
| 61 | </div> |
| 62 | </body> |
| 63 | </html> |