| 1 | <html xmlns="http://www.w3.org/1999/xhtml"> |
| 2 | <head> |
| 3 | <title>Change History</title> |
| 4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> |
| 5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> |
| 6 | </head> |
| 7 | |
| 8 | <body> |
| 9 | |
| 10 | <div id="control"> |
| 11 | <span class="productTitle">Deployment Tools Foundation</span><br /> |
| 12 | <span class="topicTitle">Change History</span><br /> |
| 13 | <div id="toolbar"> |
| 14 | <span id="chickenFeet"> |
| 15 | <a href="about.htm">Overview</a> > |
| 16 | <span class="nolink">Change History</span> |
| 17 | </span> |
| 18 | </div> |
| 19 | </div> |
| 20 | <div id="main"> |
| 21 | <div id="header"> |
| 22 | </div> |
| 23 | <div class="summary"> |
| 24 | |
| 25 | <h3><b>2007-07-03</b></h3> |
| 26 | <i>See <a href="whatsnew.htm">What's New?</a></i><br /> <br /> <br /> |
| 27 | <hr size="2"/> |
| 28 | <h3><b>2005-03-30</b></h3> |
| 29 | |
| 30 | <ul> |
| 31 | <li>New custom action proxy<ul> |
| 32 | <li><b>Managed custom actions use an XML config file to specify the CLR version.</b></li> |
| 33 | <li>New CAPack module is an unmanaged self-extracting CA DLL that can wrap both |
| 34 | managed and unmanaged custom actions. (The old managed CAProxy module is obsolete.)</li> |
| 35 | <li>Custom action build process is different but still complicated -- |
| 36 | see documentation for details.</li> |
| 37 | <li>CustomActionAttribute no longer accepts the optional NativeDependencies |
| 38 | parameter since it does not apply to the new proxy (all packaged files |
| 39 | are always extracted and available when the CA executes). </li> |
| 40 | </ul></li> |
| 41 | |
| 42 | <li>64bit support<ul> |
| 43 | <li>Various code fixes to pointer/handle types and structure alignments.</li> |
| 44 | <li>Cabinet and MSI libraries tested on AMD64 CLR.</li> |
| 45 | <li>Unmanaged and managed parts of custom action proxy tested on AMD64.</li> |
| 46 | </ul></li> |
| 47 | |
| 48 | <li>MSI 3.1 APIs added:<ul> |
| 49 | <li>Installer.SetExternalUI(ExternalUIRecordHandler)</li> |
| 50 | <li>Installer.NotifySidChange</li> |
| 51 | </ul></li> |
| 52 | |
| 53 | <li>Code builds easier with .NET Famework 2.0<ul> |
| 54 | <li>AugmentIL post-build step is no longer necessary when compiling the cabinet code |
| 55 | against .NET Framework 2.0, which has builtin support for cdecl delegates.</li> |
| 56 | <li>All C# code compiles against .NET Framework 2.0 without obsolete warnings, |
| 57 | when setting the NETFX2 preprocessor define.</li> |
| 58 | <li>Same code is still compatible with .NET Framework 1.0 + AugmentIL.</li> |
| 59 | </ul></li> |
| 60 | |
| 61 | <li>Miscellaneous bugfixes/changes:<ul> |
| 62 | <li>InstallPackage.ExtractFiles could fail in some cominations of |
| 63 | compressed/uncompressed files - fixed.</li> |
| 64 | <li>Installer.DeterminePatchSequence was broken due to an incorrect interop struct - fixed.</li> |
| 65 | <li>CabinetInfo and CabinetFileInfo classes made serializable.</li> |
| 66 | <li>Added Session.FormatString method to simplify formatting a string with |
| 67 | property substitutions.</li> |
| 68 | </ul></li> |
| 69 | <li>Documentation updates:<ul> |
| 70 | <li>Updated all documentation for new CA proxy.</li> |
| 71 | <li>Added new topic discussing InstallUtil.</li> |
| 72 | </ul></li> |
| 73 | </ul> |
| 74 | |
| 75 | <hr size="2"/> |
| 76 | <h3><b>2004-04-13</b></h3> |
| 77 | |
| 78 | <ul> |
| 79 | <li>Documentation<ul> |
| 80 | <li>Consolidated all documentation into a single CHM file.</li> |
| 81 | <li>Added new topics about working with MSI databases & cabinet files, |
| 82 | to help new users get oriented more easily.</li> |
| 83 | </ul></li> |
| 84 | |
| 85 | <li>WindowsInstaller<ul> |
| 86 | <li>Removed [Beta] tags from MSI 3.0 APIs, but otherwise there |
| 87 | have been no changes since 3.0 Beta 1.<ul> |
| 88 | <li>Be warned these are still the least-tested parts of |
| 89 | the library, so early users may encounter bugs.</li> |
| 90 | </ul></li> |
| 91 | </ul></li> |
| 92 | |
| 93 | <li>InstallPackage<ul> |
| 94 | <li>Fixed InstallPackage.ExtractFiles() bug when directory doesn't exist.</li> |
| 95 | <li>Added ability to handle uncompressed files in a package marked as compressed.</li> |
| 96 | </ul></li> |
| 97 | |
| 98 | <li>Cabinet<ul> |
| 99 | <li>Fixed improper handling of file attributes.<ul> |
| 100 | <li>This bug caused some packages to not be extractable by other tools.</li> |
| 101 | </ul></li> |
| 102 | <li>Added support for UTF filenames.<ul> |
| 103 | <li>Non-ASCII filenames will automatically be stored as UTF-8. |
| 104 | (But note most other tools don't know how to extract them.)</li> |
| 105 | </ul></li> |
| 106 | </ul></li> |
| 107 | </ul> |
| 108 | |
| 109 | <hr size="2"/> |
| 110 | <h3><b>2003-10-13</b></h3> |
| 111 | |
| 112 | <ul> |
| 113 | <li>Cab<ul> |
| 114 | <li>Fixed a bug introduced in v2.4.0 that caused files to be left in the %TEMP% |
| 115 | directory after creating a cab.</li> |
| 116 | <li>Unsealed the CabinetInfo, CabinetFileInfo, CabinetStatus classes and made a few methods |
| 117 | protected and virtual.</li> |
| 118 | </ul></li> |
| 119 | |
| 120 | <li>AugmentIL<ul> |
| 121 | <li>Fixed a bug that sometimes caused a crash when specifying a relative output path |
| 122 | on the command-line.</li> |
| 123 | <li>Fixed a bug that sometimes caused the Win32 version to be missing from the output file.</li> |
| 124 | </ul></li> |
| 125 | |
| 126 | <li>Samples\Diff: added new sample tool<ul> |
| 127 | <li>Recursively diffs directories, MSIs, MSPs, CABs, other files.</li> |
| 128 | </ul></li> |
| 129 | </ul> |
| 130 | |
| 131 | <hr size="2"/> |
| 132 | <h3><b>2003-09-23</b></h3> |
| 133 | |
| 134 | <ul> |
| 135 | <li>Cab<ul> |
| 136 | <li>Fixed a bug that caused compressing very large files/file sets to use way too |
| 137 | much memory. Performance on large inputs is now within a few % of native cab tools |
| 138 | (sometimes even a little faster!) for the same compression level.</li> |
| 139 | </ul></li> |
| 140 | |
| 141 | <li>WindowsInstaller<ul> |
| 142 | <li>All the new MSI 3.0 beta APIs are wrapped, resulting in the following additions:<ul> |
| 143 | <li>New classes - Product, Patch (for accessing sourcelist and other config)</li> |
| 144 | <li>New methods on Install class - GetProducts, GetPatches, RemovePatches, |
| 145 | ApplyMultiplePatches, DetermineApplicablePatches, ExtractPatchXmlData</li> |
| 146 | <li>New enumerations - InstallContext, PatchStates, SourceType</li> |
| 147 | <li>Additional InstallProperty values</li> |
| 148 | </ul></li> |
| 149 | <li>Note, MSI 3.0 support should be considered preliminary for now, |
| 150 | as APIs (both native and managed) are subject to change.</li> |
| 151 | <li>For MSI 2.0 compatibility, developers should not use any classes or |
| 152 | methods that are marked as [MSI 3.0 beta] in the documentation.</li> |
| 153 | <li>And unrelated to 3.0, a few additional enums have been added: |
| 154 | DialogAttributes, ControlAttributes, CustomActionTypes, |
| 155 | IniFileAction, RegistryRoot, RemoveFileInstallMode, |
| 156 | ServiceControlEvents, ServiceInstallFlags, TextStyles, |
| 157 | UpgradeAttributes, LocatorType</li> |
| 158 | <li>Also made a few minor non-breaking changes to keep the library FxCop-clean.</li> |
| 159 | </ul></li> |
| 160 | |
| 161 | <li>AugmentIL<ul> |
| 162 | <li>Added support for strongname signing and delay-signing. AugmentIL tries to |
| 163 | locate the keyfile using the AssemblyKeyFileAttribute, or you may specify the |
| 164 | path with the new /key option.</li> |
| 165 | <li>All "released" assemblies will now be strongname-signed |
| 166 | (with an unofficial key).</li> |
| 167 | </ul></li> |
| 168 | |
| 169 | <li>CAProxy<ul> |
| 170 | <li>Added support for NativeDependencies property on CustomActionAttribute. This enables |
| 171 | custom actions to P/Invoke into native DLLs that are carried with them.</li> |
| 172 | </ul></li> |
| 173 | |
| 174 | <li>Samples\SampleCAs<ul> |
| 175 | <li>In SampleCA2, changed MessageBox.Show("") to session.Message(User,""), |
| 176 | because generally it is a bad practice for CAs to show independent UI.</li> |
| 177 | <li>Added test of CustomActionAttribute.NativeDependencies functionality.</li> |
| 178 | </ul></li> |
| 179 | |
| 180 | <li>Samples\CabPack: added new sample<ul> |
| 181 | <li>Demonstrates & tests the cab library by creating self-extracting packages</li> |
| 182 | </ul></li> |
| 183 | |
| 184 | <li>Samples\Inventory: added new sample<ul> |
| 185 | <li>Shows a hierarchical, relational, searchable view of all of the product, |
| 186 | feature, component, file, and patch data managed by MSI, for all products |
| 187 | installed on the system.</li> |
| 188 | </ul></li> |
| 189 | </ul> |
| 190 | |
| 191 | <hr size="2"/> |
| 192 | <h3><b>2003-09-12</b></h3> |
| 193 | |
| 194 | <ul> |
| 195 | <li>Cab:<ul> |
| 196 | <li>Added CabinetInfo.CompressDirectory method, capable of compressing an |
| 197 | entire directory tree structure.</li> |
| 198 | <li>Updated documentation of various methods concerning support of directory |
| 199 | structure inside cabs.</li> |
| 200 | <li>CabinetInfo case-sensitivity was inconsistent - |
| 201 | now it is case-insensitive by default, though case is still preserved</li> |
| 202 | <li>Separated assembly attributes into assembly.cs</li> |
| 203 | </ul></li> |
| 204 | <li>Msi:<ul> |
| 205 | <li>InstallerException and subclasses automatically get extended error data |
| 206 | from MSI's last-error-record when available. The data is stored |
| 207 | in the exception and made available through the GetErrorRecord() |
| 208 | method, and the exception's Message includes the formatted error |
| 209 | message and data. This makes most exceptions extremely informative!</li> |
| 210 | <li>Added View.GetValidationErrors() method, and supporting ValidationErrorInfo |
| 211 | struct and ValidationError enum. This wrapper for the MsiViewGetError |
| 212 | API had been accidentally left out.</li> |
| 213 | <li>Session.Message() now supports message-box flags to specify buttons & icon</li> |
| 214 | <li>Added doc remarks to various methods about closing handles.</li> |
| 215 | <li>Separated assembly attributes into assembly.cs</li> |
| 216 | </ul></li> |
| 217 | <li>AugmentIL:<ul> |
| 218 | <li>Recent builds of ildasm v2.0.* have a slightly different output format, |
| 219 | which could break AugmentIL in some cases - fixed</li> |
| 220 | </ul></li> |
| 221 | <li>SampleCAs:<ul> |
| 222 | <li>Removed 'using' clause from SampleCA1 -- there's no need to close the session's active database handle</li> |
| 223 | </ul></li> |
| 224 | <li>Documentation:<ul> |
| 225 | <li>Added note to ReadMe about compiling the cab source into another assembly</li> |
| 226 | </ul></li> |
| 227 | </ul> |
| 228 | |
| 229 | <hr size="2"/> |
| 230 | <h3><b>2003-08-07</b></h3> |
| 231 | |
| 232 | <ul> |
| 233 | <li>Cab:<ul> |
| 234 | <li>CabinetInfo.IsValid() usually returned false even for valid cabs - fixed</li> |
| 235 | <li>Extracting cab files with null timestamps generated exception - fixed</li> |
| 236 | </ul></li> |
| 237 | <li>Msi:<ul> |
| 238 | <li>Added InstallCanceledException, subclass of InstallerException; |
| 239 | Methods which may be canceled by the user can throw this exception</li> |
| 240 | <li>Added MessageResult enumeration; |
| 241 | Used by Session.Message() and ExternalUIHandler delegate</li> |
| 242 | <li>Installer.EnableLog() now supports extended attributes correctly: |
| 243 | Append mode and flush-every-line</li> |
| 244 | <li>Added Session.DoActionSequence() - |
| 245 | This wrapper for the MsiSequence API had been accidentally left out</li> |
| 246 | </ul></li> |
| 247 | <li>CAProxy:<ul> |
| 248 | <li>Catches InstallCanceledException, returns ERROR_INSTALL_USEREXIT |
| 249 | so CA developer doesn't necessarily have to handle the exception</li> |
| 250 | </ul></li> |
| 251 | <li>Msi\Package:<ul> |
| 252 | <li>Added TransformInfo class: metadata about an individual patch transform</li> |
| 253 | <li>Added PatchPackage.GetTransform*() methods which return TransformInfo</li> |
| 254 | </ul></li> |
| 255 | <li>Documentation:<ul> |
| 256 | <li>Added section to ReadMe.htm about building managed custom actions</li> |
| 257 | </ul></li> |
| 258 | </ul> |
| 259 | |
| 260 | <hr size="2"/> |
| 261 | <h3><b>2003-06-02</b></h3> |
| 262 | |
| 263 | <ul> |
| 264 | <li>Msi:<ul> |
| 265 | <li>Validation didn't work on merge modules - fixed</li> |
| 266 | </ul></li> |
| 267 | <li>CAProxy:<ul> |
| 268 | <li>Was broken in 2.1 - fixed</li> |
| 269 | </ul></li> |
| 270 | </ul> |
| 271 | |
| 272 | <hr size="2"/> |
| 273 | <h3><b>2003-05-14</b></h3> |
| 274 | |
| 275 | <ul> |
| 276 | <li>Msi:<ul> |
| 277 | <li>External UI handler didn't survive a garbage collection - fixed</li> |
| 278 | <li>Validation engine was completely broken - now it should work |
| 279 | at least for MSIs which are already mostly valid</li> |
| 280 | <li>Added DynamicLoad property to CustomActionAttribute<br /> |
| 281 | Usage: set DynamicLoad=false when using XmlSerialization; default is true</li> |
| 282 | </ul></li> |
| 283 | <li>Msi\Package:<ul> |
| 284 | <li>File extraction and update methods didn't work on merge modules - fixed</li> |
| 285 | <li>Made file update code slightly more robust</li> |
| 286 | <li>Removed hard-reference to the FilePatch assembly - now it is only |
| 287 | loaded if working with binary file patches</li> |
| 288 | </ul></li> |
| 289 | <li>AugmentIL:<ul> |
| 290 | <li>AugmentIL would crash if some input files had read-only attr - fixed</li> |
| 291 | <li>Made /verbose switch slightly more verbose</li> |
| 292 | </ul></li> |
| 293 | <li>CAProxy:<ul> |
| 294 | <li>Added support for the DynamicLoad property of CustomActionAttribute</li> |
| 295 | <li>Added MMsiBreak debugging functionality - see doc</li> |
| 296 | </ul></li> |
| 297 | <li>Samples\WiFile:<ul> |
| 298 | <li>Added /l (list files) switch</li> |
| 299 | </ul></li> |
| 300 | <li>Samples\SampleCAs:<ul> |
| 301 | <li>In the makefile the comments about debug builds had an error; |
| 302 | Now the sample builds debug packages (correctly) by default.</li> |
| 303 | </ul></li> |
| 304 | <li>Documentation:<ul> |
| 305 | <li>Wrote AugmentIL.htm describing the AugmentIL tool and its options.</li> |
| 306 | <li>Wrote WiFile.htm describing the WiFile sample tool.</li> |
| 307 | <li>Added section to ReadMe.htm about debugging managed custom actions.</li> |
| 308 | </ul></li> |
| 309 | </ul> |
| 310 | |
| 311 | <hr size="2"/> |
| 312 | <h3><b>2003-03-31</b></h3> |
| 313 | |
| 314 | <ul> |
| 315 | <li>Msi: Implemented the remaining APIs, also minor improvements and bugfixes<ul> |
| 316 | <li>All published APIs are wrapped, with the exception of four: |
| 317 | MsiGetFileSignatureInformation (because I don't know of a .NET analog |
| 318 | for the returned certificate structure), and 3 APIs for previewing UI</li> |
| 319 | <li>Database.OpenView and Database.Execute* now take String.Format style params</li> |
| 320 | <li>Database.ApplyTransform can optionally use the error-suppression flags |
| 321 | stored in the transform summary info</li> |
| 322 | <li>Added a few supporting enumerations and structures for the remaining APIs</li> |
| 323 | <li>InstallerException gets a descriptive message for any MSI or system error</li> |
| 324 | <li>Fixed a bug in InstallerException which would usually report "error 0"</li> |
| 325 | <li>Added optimization for setting a Record field to a MemoryStream</li> |
| 326 | <li>Record.GetStream is capable of extracting substorages</li> |
| 327 | <li>Moved InstallPath class to Microsoft.WindowsInstaller.Package assembly</li> |
| 328 | </ul></li> |
| 329 | <li>Msi\FilePatch: added new project<ul> |
| 330 | <li>Binary file patch API wrapper</li> |
| 331 | </ul></li> |
| 332 | <li>Msi\Package: added new project<ul> |
| 333 | <li>Helper classes for working with MSI and MSP packages</li> |
| 334 | </ul></li> |
| 335 | <li>Cab: some minor bugfixes<ul> |
| 336 | <li>Cabinet.Extract(stream, name) threw a NullReferenceException if the file |
| 337 | didn't exist in the cab -- now it returns null</li> |
| 338 | <li>CabinetInfo.CompressFileSet() was broken -- fixed</li> |
| 339 | <li>If a Cabinet callback throws an exception, it is propogated as the |
| 340 | inner-exception of the CabinetException</li> |
| 341 | </ul></li> |
| 342 | <li>Samples\WiFile: added new sample<ul> |
| 343 | <li>Demonstrates some features of InstallPackage class in Msi\Package project</li> |
| 344 | </ul></li> |
| 345 | </ul> |
| 346 | |
| 347 | <hr size="2"/> |
| 348 | <h3><b>2003-03-20</b></h3> |
| 349 | |
| 350 | Documentation!<ul> |
| 351 | <li>Msi and Cab sources include complete C# XML documentation.</li> |
| 352 | <li>Msi and Cab makefiles generate XML documentation files.</li> |
| 353 | <li>Reference CHM compiled from XML documentation with NDoc.</li> |
| 354 | </ul> |
| 355 | |
| 356 | <p>I am aware that exceptions are still not documented in most areas. |
| 357 | Other than that, feel free to send me a note if it's still not clear |
| 358 | how to use parts of the API after reading the documentation.</p> |
| 359 | |
| 360 | <p>Version is still 1.1 because there are no code changes in this release.</p> |
| 361 | |
| 362 | <hr size="2"/> |
| 363 | <h3><b>2003-03-13</b></h3> |
| 364 | |
| 365 | <ul> |
| 366 | <li>Msi: lots of small improvements for usability and consistency<ul> |
| 367 | <li>Reworked ExternalUIHandler support</li> |
| 368 | <li>Added Installer properties/methods:<ul> |
| 369 | <li>Components</li> |
| 370 | <li>ComponentClients()</li> |
| 371 | <li>ComponentState()</li> |
| 372 | <li>ComponentPath()</li> |
| 373 | <li>EnableLog()</li> |
| 374 | </ul></li> |
| 375 | <li>Added Session.EvaluateCondition() method</li> |
| 376 | <li>Improved exception-handling in many methods in Installer, Database, |
| 377 | & Session classes</li> |
| 378 | <li>Added extensive XML doc-comments to Installer, Database, View, |
| 379 | & Session classes</li> |
| 380 | <li>A few breaking changes:<ul> |
| 381 | <li>View.ModifyMode enumeration moved outside View and |
| 382 | renamed ViewModifyMode</li> |
| 383 | <li>InstallLogMode enumeration renamed to InstallLogModes |
| 384 | (naming convention for bitfields)</li> |
| 385 | <li>Record constructor takes arbitrary number of parameters</li> |
| 386 | </ul></li> |
| 387 | </ul></li> |
| 388 | <li>AugmentIL: almost completely rewritten<ul> |
| 389 | <li>Ildasm/ilasm steps are built-in<ul> |
| 390 | <li>The round-trip can be done in one step</li> |
| 391 | <li>IL source input/output is still supported</li> |
| 392 | </ul></li> |
| 393 | <li>Never throws an unhandled exception</li> |
| 394 | <li>Organized command-line options, consistent with other .NET tools</li> |
| 395 | <li>Uses a plugin architecture to allow additional augmentations</li> |
| 396 | </ul></li> |
| 397 | <li>CAProxy: Added AIL_CAProxy.cs - AugmentIL plugin generates CA proxy methods</li> |
| 398 | |
| 399 | <li>SampleCAs: Updated makefile for new AugmentIL usage</li> |
| 400 | </ul> |
| 401 | |
| 402 | <hr size="2"/> |
| 403 | <h3><b>2003-01-16</b></h3> |
| 404 | |
| 405 | <ul> |
| 406 | <li>ReadMe.htm: Added section on writing managed CAs</li> |
| 407 | <li>SampleCAs: Added missing reference to System.Windows.Forms.dll to the makefile</li> |
| 408 | <li>AugmentIL: Added specific warning messages for when CA method has wrong signature</li> |
| 409 | <li>Put sources in Toolbox-hosted Source Depot.</li> |
| 410 | </ul> |
| 411 | |
| 412 | <hr size="2"/> |
| 413 | <h3><b>2003-01-14</b></h3> |
| 414 | Initial posting to http://toolbox |
| 415 | |
| 416 | <p> </p> |
| 417 | </div> |
| 418 | |
| 419 | <div id="footer"> |
| 420 | <p /> |
| 421 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> |
| 422 | wix-users@lists.sourceforge.net</a> |
| 423 | |
| 424 | <script type="text/javascript"> |
| 425 | var HT_mailLink = document.getElementById("HT_MailLink"); |
| 426 | var HT_mailLinkText = HT_mailLink.innerHTML; |
| 427 | HT_mailLink.href += ": " + document.title; |
| 428 | HT_mailLink.innerHTML = HT_mailLinkText; |
| 429 | </script> |
| 430 | |
| 431 | <p /> |
| 432 | |
| 433 | </div> |
| 434 | </div> |
| 435 | |
| 436 | </body> |
| 437 | </html> |