Darwin Setup Development Notes for Testing Releases ----------------------------- Release 0.10.00.3702 ----------------------------- 97-12-31 johndelo Unicode builds are now functional. A known problem is that the rich text edit control does not format. It is important at this point that the database functions work win Unicode to facilitate localization. 97-12-29 bench added support for applying a patch to an advertised- but-not-installed product. In this case we simply register the patch for future use without installing anything. When the product is finally installed, it will be patched at the same time. ----------------------------- Release 0.10.00.3630 ----------------------------- 97-12-29 davidmck Added DllGetVersion call to msi.dll. Standard for system dlls. 97-12-29 davidmck Checked in the delay-load linker from OTOOLS9. We now delay loading of User and GDI. 97-12-28 malcolmh Added ixoMediaSourceListPublish. Removed media-related arguments to ixoSourceListPublish. We now register all volume labels and disk prompts for a product, not just Disk 1's. We also now register the relative path to the MSI on the CD. 97-12-26 malcolmh Source Management: Added the ability to have a package located at an arbitrary location on a CD, not just at the root. Added a parameter to the IxoSourceListPublish op to support this. Bumped the script version. Added registration of a relative path as the default value under the Media sourcelist key. ----------------------------- Release 0.10.00.3626 ----------------------------- 97-12-23 tracyf Fixed bug 3520. As noted in the bug resolution, the fix required the removal of the up-front directory writability checks that were being performed during the CostFinalize action. See also related bugs 817, 1162, and 1824. ----------------------------- Release 0.10.00.3623 ----------------------------- 97-12-22 malcolmh Almost all of the sourcelist spec is now implemented. Product level source management works except nested installs and URL sources. 97-12-22 malcolmh The IxoSourcesListPublish opcode now has 3 arguments: a media label and disk prompt have been added. The script version has been bumped to 4 as a result of this change. 97-12-22 malcolmh Fixed bug 3106. We now support inserting temporary rows via SQL, using the syntax: INSERT INTO {table} ({column-list}) VALUES ({constant-list}) [TEMPORARY]. 97-12-19 malcolmh Fixed bug 3714. We now handle UNICODE messaging through external UI handlers correctly. 97-12-19 malcolmh Fixed bug 3674. We now correctly rollback product and user registration and unregistration. DEV: The conman's RegisterProduct, UnregisterProduct, and RegisterUser functions have moved into execute. TEST: MsiConfigurationManager and MsiServer no longer have the RegisterProduct, UnregisterProduct, and RegisterUser methods. ----------------------------- Release 0.10.00.3619 ----------------------------- 97-12-18 johndelo ODBC database access has been removed from MSI. Eventually a tool will be finished to import/export from ODBC databases (including Access .MDB files). Only MSI databases are supported by the installer now. No external API changes, but internal automation has deleted the database type argument (for a short time the old 3-argument CreateDatabase calls will be supported). 97-12-18 johndelo Localizable columns are now indicated in the database schema internally with the icdLocalizable bit, and in the .idt files with "L" or "l", rather then "S" or "s". Schema, Template, Testdb, Simple, Minimum, OdbcTest are updated. Other databases need to updated to be compatible with the localization tools. 97-12-18 johndelo Merge and Transform schema comparison checks have been relaxed to ignore differences in the localization bit (S vs. L) and SQL column width specifications, i.e. S32. 97-12-18 malcolmh Checked in msidiff.cpp. This tool compares msi packages and tells you whether they're the same. It sets an errorlevel of 0 if they're the same, 1 if they're different, and >1 on error. This tool is not currently dropped but can be made by using the MSIDIFF target. 97-12-17 malcolmh Fixed bug 3642. We now reject invalid modes to MsiProvideComponent. 97-12-17 malcolmh Fixed bug 3630. This was a bug in MsiEnumClientsW. 97-12-17 malcolmh Fixed bug 2224 (again). We now support leaving off the ".msi" extension when launching an install. If we can't find the path you specify then we'll tack on ".msi" for you if you don't specify your own extension. 97-12-17 malcolmh Fixed bugs 3684, 3698: Changes in transform generation: 1) If you attempt to generate a transform between databases that are the same you'll get an error (ERROR_NO_DATA from the API or a Darwin error from the automation layer). 2) If you encounter an error during transform generation the transform file is not written. 3) MsiDatabase.GenerateTransform's storage object can now be Nothing. If you pass in Nothing then we'll simply compare the databases, returning when the first difference is found. Return values are as described in 1), above. 4) MsiDatabaseGenerateTransform can now take a NULL or empty string for its file parameter. This has the same effect as passing in Nothing as described in 3), above. 97-12-17 bench Fixed bug 3683. We no longer format property values with FormatText before writing them to the log in the property dump, since the code doesn't format the values of a property before using it. 97-12-17 malcolmh Fixed bug 3498. We now support language neutral in the Template summary info property. Specifying 0 or no language indicates that a package is language-neutral. A language-neutral package will run on any language and we won't apply any language transforms. Note that languages are now separated by commas. (see below for details on the Template summary info property format). 97-12-17 malcolmh Fixed bug 3561. We now validate the platform specified in the summary info. This required the following changes: 1) A new ieiEnum return from Engine.Initialize has been added: ieiPlatformUnsupported. This caused some ieiEnum values to change. 2) The syntax of the Template summary info property has changed. The new syntax is: [platform property][,platform property][,...];[language id][,language id][,...]. Some examples of different platform designations: Alpha,Intel;1033 Intel,Alpha;1033 Alpha;1033 Intel;1033 ;1033 3) Specifying no platform implies that the package is platform-independent, and we'll allow it to be run on any platform. Otherwise, if the current platform doesn't match one of the platforms you specify then we'll return ieiPlatformUnsupported and refuse to run the package. 4) A new external error code, ERROR_INSTALL_PLATFORM_UNSUPPORTED, has been added. 97-12-17 davidmck Added version checking to instmsi and created copymsi which does not do version checking. We version check just msi.dll and if instmsi has a newer one, we copy over msi.dll, msiexec.exe and msihnd.dll. If any of those three are in use, we schedule them all for replace on reboot. Also added a timebomb to instmsi. ----------------------------- Release 0.10.00.3616 ----------------------------- 97-12-15 johndelo Fixed conditional expression evaluator to correctly processs feature and components states. They were using internal state values rather than those published in the doc and MSI.H, and were failing on removed components. 97-12-15 johndelo Nested installs are now functional, according to the Custom Action spec. Reboot handling may be incomplete for child installs, and progress info is not display correctly. Nested installs sequenced between InstallValidate and ExecuteFinalize will be merged into the parent's script. 97-12-15 chetanp Provided the ability for sharing advertisement information for the Extensions, ClassIds, ProgIds, TypeLibs, Published Components (and Shortcuts) amongst products. This is needed because there are several components (building blocks like VBA) that are shipped with the several products which may individually advertise this information. Here we allow the advertisement to be around till the very last product chooses to unadvertise it. This is achieved this sharing of advertisement information via Darwin Descriptor lists. This is simply a MULTI_SZ list of Darwin Descriptors. For a feature of a product that serves as a server for an advertised entity (like Extension, ClassId, ....) we follow the following rules: 1. Whenever the feature is advertised, installed or reinstalled, its Darwin Descriptor is (placed at)/ (moved to) the beginning of the list. 2. Whenever the feature is uninstalled its Darwin Descriptor is removed from the list. 3. The entire advertised Class/ Extension/ ProgID/ MIME/ TypeLibrary/ Published Components information is removed only when the last Darwin Descriptor in the associated list goes away. 4. The MSI APIs that deal with Darwin Descriptors (MsiProvideComponentFromDescriptor and MsiProvideQualifiedComponent) will use only the first Darwin Descriptor in the list. Support for sharing shortcuts has not been implemented due to certain limitations with the amount of information we can store within the path field of shortcuts. 97-12-15 chetanp changed ProcessFileFromData function to call RemoveFile on uninstall. This fixes the icons not being removed issue. 97-12-15 chetanp Changed opcodes ixo -ComponentPublish, ComponentUnpublish, RegClassInfoRegister, RegClassInfoUnregister, RegExtensionInfoRegister, RegExtensionInfoUnregister, ShortcutCreate, TypeLibraryRegister, TypeLibraryUnregister to take a Feature, Component rather than a Darwin Descriptor so as to compose the DD on the execute side. 97-12-12 malcolmh Fixed bugs 3617, 3592. Incorrect resolution of SOURCEDIR when running from media. ----------------------------- Release 0.10.00.3612 ----------------------------- 97-12-10 johndelo Opcodes: added Parent as first arg for ProductRegister and ProductUnregister. Replaced unused opcode Secuity with ProductRestore, used to restore product info following a nested install. Nested installs are not fully operational yet. 97-12-10 bench Patching: added ability for patches to remove obsolete patches that they "contain." Updated the Engine code that handles patch application. Also updated the MsiPat tool to stuff a list of old patch codes into the patch package to enable this functionality. See MsiPat.hlp for more info. 97-12-10 malcolmh Removed ixoProductRegisterControlPanelInfo and ixoProductUnregisterControlPanelInfo. This is now done by ixoProductRegister/Unregister. Added 3 more icmrpf values to Conman::RegisterProduct's ProductInfo argument to support this. 97-12-10 malcolmh Bumped script version to 3 as a result of removing control panel opcodes. New scripts are not compatible with the old ones. 97-12-10 davidmck Added EncodeString() that takes const ICHAR * since we did not need an MsiString& and this was causing some routines to create a unnecessary object. 97-12-10 davidmck Added /Y and /Z for selfreg and selfunreg to msiexec. Format is /Y dll_to_register. 97-12-10 malcolmh Added ixoSourceListUnpublish operation. This removes information registered by ixoSourceListPublish. 97-12-10 bench Fixed bugs 2470 and 3587. 2470: we now handle cases where the process holding a file is explorer.exe and we have the full path and not just the file name. Previously we were just comparing the name to "explorer" and not catching this case, where we shouldn't put up the FilesInUse dialog. 3587: Re-allow the calling of Engine.ExecuteRecord(ixoActionStart,...) for testing purposes. 97-12-09 bench Fixed bug 3583. The change was made to require passing ACTION=[Admin|Advertise] on the command line when calling either of those actions, rather than not passing that property and just calling DoAction(Action) after Engine.Initialize. However, certain apis like MsiAdvertiseProduct were not doing this so they needed to be fixes as well. The fix was to have all apis calling either action to pass the ACTION property on the command line to Engine.Initialize. ----------------------------- Release 0.10.00.3609 ----------------------------- 97-12-07 malcolmh Fixed bug 3443. We now correctly apply a list of transforms specified at advertise time. 97-12-07 malcolmh Changed behavior of MsiDirectoryManager.GetSourcePath and MsiGetSourcePath. The directory key may now be either a key in the Directory column for any folder or the DefaultDir value for a root folder. The latter allows passing either the target or source property name to obtain the source path for a folder. For example, you can call now GetSourcePath("SOURCEDIR") to get SOURCEDIR's path. 97-12-07 malcolmh Fixed bugs 3363, 3364. Removed obsolete iei* value: ieiUpgradeInstaller, ieiServerInaccessible, ieiConfigDatabaseError. 97-12-07 malcolmh We now write a network source list to HCKR\Installer\Product\{PCODE}\SourceList\Net. See the SourceList spec for details. 97-12-07 malcolmh Changed HCKR\Installer\Product\{PCODE}\SourceList\Package registry value to "PackageName". 97-12-07 malcolmh Changed HCKR\Installer\Product\{PCODE}\SourceList\LastUsedNet registry value to "LastUsedSource". 97-12-07 malcolmh Costing of registry values that contain paths referencing the install source has become a bit less granual. We want to avoid resolving the source until as late as possible and doing exact costing for these values requires us to know the source up front. 97-12-07 malcolmh Added the SOURCELIST property. This is used to specify a list of alternative sources for a product. 97-12-07 malcolmh We now defer resolving SOURCEDIR until it is necessary. For example, during a "Remove All" operation we don't ever need the source and therefore don't resolve SOURCEDIR. When a source path is requested we'll resolve the source and process the Directory table to create the source paths. The Browse Dialog currently forces an early source resolution. In the future it will not. Events that can trigger source resolution include: - The user chooses to install file from the source. - The local cached package is missing so we need to fetch a new one from the source. The current implementation doesn't do much resolving, as it still only uses the LastUsedSource. In the next few days the final implementation will be done and the source resolution will include scouting through the sources to find a good one, possibly prompting the user for a source if necessary. DEV: As a consequence of this change SOURCEDIR should now be accessed through Engine::GetSourcePath. 97-12-07 malcolmh Setting SOURCEDIR on the command-line now has no effect. Packages must be at the root of the source. 97-12-07 malcolmh Removed the SourcePath argument from ixoProductInfo. The argument is no longer necessary as the last used source is now registered by ixoSourceListPublish. 97-12-07 malcolmh Added ixoSourceListPublish opcode. As its name indicates, this opcode publishes the product's list of possible sources. 97-12-07 bench Changed the way the iefAdmin and iefAdvertise Engine mode bits are set. Previously, these were set in the ADMIN and ADVERTISE actions. As these bits are needed in Engine.Initialize for patch handling and proper detection of maintenance mode, they are now set in Engine.Initialize by checking the value of the ACTION property passed in the command line. The ACTION and ADVERTISE actions now return iesNoAction if they are called when the appropriate mode bits are not set. In short, to run in either Admin or Advertise mode, the ACTION property must be set on the command line passed to Engine.Initialize. 97-12-07 bench Checked in version 1.5.104 of mspatch.dll and mspatch.lib for alpha and x86. This new drop contains a fix for a bug that prevented patching bound files. 97-12-06 bench Removed the file \\united\darwin\darwin.rel\[build]\[platform]\samples\testdb\instmsi.exe. This was a remnant of the launcher days when this file was required to sit next to the launcher. Whoever needs to install testdb from this point can get Darwin from one of the main folders. 97-12-06 bench Added two new databases to the \\united\darwin drop. This first is in the tools folder. The second is in the samples folder. minumum.msi - contains the minimum number of tables, plus an InstallSequence table with all built-in actions. The purpose of this database is to prove (and test) that a small set of tables are required in any database. simple.msi - contains only tables necessary to provide simple UI and install a single file. This database is also used by a custom action of TestDb for a nested install. 97-12-06 bench Bumped the script version to 2 as a result of adding new opcodes. Old scripts are not compatible with the new Darwin. 97-12-06 bench The first phase of Darwin patching support is implemented. All documentation is pending. 1. Support for patch packages. Patch packages are storage files like install packages, but contain only transforms and cab files, and information about what products they may be applied to. Patch packages have .msp extensions, their own OLE storage ids, an association with MsiExec /b and their own shell verb menus. "Opening" a patch package calls MsiExec /b with the path of the patch. 2. The MsiPat.dll tool may be used to create patch packages. See help for CreatePatchPackage and CreatePatchPackageFromImages. 2. Added the MsiExec /b option, which calls MsiApplyPatch with the path of a patch package. 3. Added the MsiApplyPatch api. The API takes the full path of a patch package and applies the patch to all advertised products the package designates as valid targets. This is accomplished by setting the PATCH property on the command line passed to Engine.Initialize. 4. Added support for the PATCH property in the Engine. This property defines the path of a new patch package to be applied to the product. Engine.Initialize applies all valid transforms from the package as well as transforms from previously applied packages. 5. The PublishProduct and UnpublishProduct actions handle the registration and unregistration of patch packages, and the caching of new patch packages to the %windows%\msi folder. The PublishProduct detects if a new patch has been applied and dispatches the ixoPatchRegister and ixoPatchCache operations for it. The UnpublishProduct action automatically unregisters all patches currently applied to the product. 6. Added the ixoPatchRegister and ixoPatchUnregister operations, which register and unregister patch packages for a product. Each patch is registered under HKCR\Installer\Patchs\{patch guid} which contains the SourceList for the patch. Each product registers the patches applied to it under HKCR\Installer\Products\{product code}\Patches which contains an ordered list of the patches (in the order the patches are to be applied) and the list of transforms from the patch that may be applied to the particular product. 7. Added the ixoPatchCache operation, which moves a patch package from a temporary location (like "Temporary Internet Files") to the %windows%\msi folder. This op also registers the path of the cached package under the key HKLM\SW\MSFT\Windows\CurrentVersion\Installer\Patches\{patch code} 8. Added the Patch and PatchPackage tables. The Patch table defines the various file patches belonging to all patch packages applied to the product. The PatchPackage table defines all Patch packages currently applied to the product. These tables will only be added to a database by patch transforms. 9. Added the private APIs MsiEnumPatches and MsiGetPatchInfo. The first enumerates all patches currently applied to a given product. The second queries for various properties of an applied patch. Major remaining items for patching: patch resiliency, patches that change the product code, patches with cabinets outside the package, PatchValidate action, removal of old patches when a new patch overrides them, digital signatures for patch packages, admin install patching and RFS component handling. 97-12-06 malcolmh A number of fixes have been made to transform generation, transform application, the database, and msitran to correct problems related to exceeding the 64K string limit. (see bug 3537 for full details). ----------------------------- Release 0.10.00.3605 ----------------------------- 97-12-05 chetanp the szQualifier arg in MsiEnumComponentQualifiers is now mandatory (cannot be null). 97-12-05 davidmck Made DllMain the entry point for msi.dll. This removes the standard clibrary initialization from the loading of msi.dll. We now rely on internal functions to do some of what the standard clibrary did for us. Most notably - FIsdigit for isdigit, strtol for atol or atoi, PchMbsStr for mbsstr. 97-12-05 davidmck Removed DCT_FLOAT support for JPEG pictures. The routines were never called anyway (we use Slow Integer versions currently) and this saves us code size and standard c library calls. ----------------------------- Release 0.10.00.3605 ----------------------------- 97-12-05 johndelo Implemented MsiSetExternalUI - with message filter. Order of message processing is as follows: If an external message handler is supplied AND the message mask bit for the message is TRUE, the message is sent to the external UI handler. If the handler returns other than imsNone, then UI handling is complete. If it returns imsNone, then normal UI handling proceeds as if external not called. If UI mode is None (quiet), no further UI is done. If UI mode is Reduced or Basic, MSI handler DLL is called. If UI mode is Basic, the internal message handler is called. None of this affects logging or dialog handling. 97-12-05 chetanp Added support for machine assignment - bug 2304 Affects 1. Where we write OLE and Darwin goop. 2. Where we cache the icons and the transforms. 3. Where we create the shortcuts. 4. Where we write the HKCR entries from the Registry table 97-12-05 chetanp 3. Darwin packages can be assigned to machines or to users. The decision is made during deployment when calling the new MsiAdvertiseScript API. The old MsiProcessAdvertiseScript API will call into the new MsiAdvertiseScript API with SCRIPTFLAGS_MACHINEASSIGN bit set. This is for the older NT5 Beta1 builds that did not "truly" support user assignments. 97-12-05 chetanp 4. Changed MsiAdvertiseProduct API in order to support machine and user assignments for the stand-alone scenario 97-12-05 chetanp 5. There are two distinct flags /am and /au to msiexec.exe on the command line to trigger machine or user assignment respectively ( /a with no modifier will initiate a per machine assignment). 97-12-05 chetanp 6. Changed the MSI API to first attempt to read its configuration data from under HKU\\_Merged_Classes and if that fails then from under HKCR. 97-12-05 chetanp 7. Changed Darwin Descriptor types in the Registry from REG_SZ to REG_MULTI_SZ for the coming Darwin Descriptor Lists support - bug 2213. 97-12-04 malcolmh Fixed bug 3545. We now delete the cached database on uninstall. 97-12-04 malcolmh Fixed bug 3547. Msiexec /i works again. 97-12-03 MattWe MsiSpy: So far, updated all but Japanese (unused) x86 international DLLs. Updated german alpha DLL. Waiting on arabic. 97-12-03 MattWe MsiSpy: Icons: Added 32x32 variants of all icons Added absentcomponent icon for future use Advertising: added advertise on feature level, from JBelt. Removed usage of MsiLocateComponent 97-12-03 davidmck Removed the static constructors and destructors. Constructors needed either code to change or MichMarc's PreExec tool to be run on the objs. Destructors required code changes. As part of this I changed the CActionEntry class and moved the built-in actions to a table. This table needs to be kept in order. A check is run in the debug version to assure this. ----------------------------- Release 0.10.00.3528 ----------------------------- 97-11-26 davidmck Added code to instmsi that binds the darwin exes and dlls that we install. Improves loading performance of msi.dll. 97-11-26 bench Fixed bug 3456. In basic UI when an error message (MessageBox) is displayed, the progress dialog is disabled, meaning you cannot select it or click the cancel button. 97-11-25 malcolmh The way we validate spaces and periods in paths has changed slightly. We now mimic the Explorer, following these rules: For a path segment: 1) Leading spaces are removed 2) Trailing spaces and periods are removed 3) Leading periods are an error Note that the removal of spaces and periods operates like this: Remove the leading/trailing character. Now, take the new path and validate it using the rules. Some examples (where _ represents a space): Before * After ----------------- C:\..Foo * Error C:\Foo.. * C:\Foo C:\__Foo * C:\Foo C:\.Foo. * Error C:\.. * Error C:\Foo__. * C:\Foo C:\Foo._._ * C:\Foo Among other things, this affects both the "New Folder" button in the Browse Dialog and the PathEdit control. 97-11-25 davidmck Implemented the Office memory manager. This should give us more control over our allocations. More cleanup is probably needed to remove some features we do not need. ----------------------------- Release 0.10.00.3525 ----------------------------- 97-11-24 MattWe Engine: removed dependency on InstallSequence, AdvtSequence, and AdminSequence. Minimum.msi no longer has these tables. 97-11-21 malcolmh Fixed bug 2224. We now support leaving off the ".msi" extension when launching an install. If we can't find the path you specify then we'll tack on ".msi" for you if you don't specify your own extension. ----------------------------- Release 0.10.00.3521 ----------------------------- 97-11-21 chetanp added ixoProgressTick operation to "fill in" gaps for the progress bar. 97-11-21 chetanp changed the system files refcounting mechanism to use the increment/ decrement registry value operation - so that the entire read registry value and increment/ decrement is atomic. 97-11-21 chetanp added increment regvalue and decrement regvalue operations. If one specifies "#+" for a registry value, Darwin increments the existing integer registry value. If the value is not an integer or absent, we set it to 1. Similarly if one specifies "#-" for a registry value, Darwin decrements the existing integer registry value. If the value is not an integer or reaches 0, we remove the registry value. 97-11-20 johndelo The ODBC support is working. What is missing the the changing of the directories to reflect where an older version of a driver lives, and the unregistration of existing drivers before upgrading to a newer version. Rollback of the ODBC-managed registration is not yet supported. I will be checking in an ODBC MSI package shortly that installs all Office97 ODBC components. 97-11-20 johndelo The stand-alone script executor, RunScrpt.EXE is now built and delivered. A variety of useful scripts are checked into DARWIN\src\tools\script. They generally have a Help sub that can also be invoked with "?". The validation functions are also supplied as in the single line format for use within the CustomAction table. Other functions list scripts or show MSI registration. 97-11-20 tracyf Costing performance has been SIGNIFICANTLY improved, through optimizations in both MsiEngine, and in MsiHandler. First, at maintenance mode time, directory resolution has been altered significantly to avoid excessive "Writable" and costing checks. Second, the internal costing code itself was optimized. Third, when the full or reduced UI is present (i.e. running with MsiHandler), all up-front costing is now done in the background, allowing the first wizard sequence dialog to pop up quickly. If the user manages to navigate to the feature selection dialog before costing is complete, and selects a feature, the string that normally displays the feature cost is replaced with a new string from the UIText table, "SelCostPending" (which in TestDB says "Compiling cost for this feature"). If running with the basic UI, up-front costing is not needed at all, and is no longer done (a final full costing pass is still done at InstallValidate time, regardless of UI). 97-11-20 tracyf RemoveFiles action now supports "RemoveFilesOfType" functionality. Specifically, the FileName field of the RemoveFile table now supports * and ? wildcards, allowing deletion of all files that match the specification (such as *.doc, d*, etc). The RemoveFiles table also has a new integer "InstallMode" column, allowing specification of when to perform the deletion (1: at install time, 2: at remove time, 3: at either time). If the column is not present, the InstallMode value defaults to 1 (at install time). 97-11-20 bench fixed bugs 2497 and 3219. We now log when an action starts and when it ends. These messages are Info messages so the "i" logmode is required. The two messages are 15 and 16 in the error table. 97-11-20 MattWe Security: Updated CreateFolder, AddRegistry, and InstallFile actions to use security from the LockPermissions table. Rollback and the additional actions specified for lockpermissions are holding pending finishing touches/test plan. 97-11-20 MattWe Services: Added ServiceInstall action. Added classification of errors for ServiceControl. (Better resolution of fatal versus ignorable errors.) Also added rollback to DeleteService. 97-11-20 MattWe Schema: Added optional ServiceInstall table. Describes a service to be added to an NT system. Note that this is basically the registration, it requires a file, and can be supported via the registry table for additional parameters. Schema: Added optional LockPermissions table. Describes permissions to be set via actions on various other tables. (registry, file, CreateFolder, et cetera.) 97-11-20 MattWe MsiVolume: Added FileAttributes property, with attendant automation. Allows determination of useful things like whether the volume supports ACLs. 97-11-20 MattWe Engine: Added value to ComponentID for temporary costing components. This allows us to make the ComponentId column in the schema non-nullable. (As it should be.) 97-11-20 malcolmh Fixed Handler bugs 2594, 3011, 3012, 3415, 3446 and Path bug 3240. 97-11-19 CHETANP Changed the dwReserved parameter of MsiProvideComponent and MsiProvideQualifiedCompoent to the installation mode. This can be either INSTALLMODE_DEFAULT (the original behavior), INSTALLMODE_EXISTING (provide the path, only if feature is installed and valid, else return ERROR_FILE_NOT_FOUND) or a combination of the REINSTALLMODE flags (trigger a reinstall using this and then return the path). 97-11-19 CHETANP We now refcount EVERY file for a component that is installed to the system folder. At the time of install, we increment the refcount for each of the files. At the time of uninstall we recrement the refcount for each of the files. If ANY of the files have a refcount greater than 0, the entire component is not uninstalled. ----------------------------- Release 0.10.00.3518 ----------------------------- 97-11-17 johndelo MsiOpenPackage supports a database handle in place of the path, as well as InstallProduct, e.g. "#123". After MsiOpenPackage, you can set properties and call actions (built-in or custom) and sequences. 97-11-17 johndelo The stand-alone script executor, RunScrpt.EXE is not part of the normal build, but may be built using "make debug runscrpt". It has command-line help. Several useful VBScript files have been checked in, DARWIN\src\tools\script\*.vbs , which will display various MSI information about products and scripts, will run custom actions and installs, etc. To find out what functions are available in each, use the command "RunScrpt {scriptfile} ?" (calls Sub Help). 97-11-17 johndelo The internal functions EnumerateScript & OpcodeName have been removed, along with the MsiExec -L option. The functionality is now only available through the API functions MsiOpenDatabase, MsiDatabaseOpenView, which will accept a script file and return fetched records, complete with format strings. See the script function ListScript(script) in ShowMsi.vbs for usage. 97-11-17 bench Added the CreatePatchPackageFromImages method to msipat.dll. See help for more info. 97-11-16 bench Added WindowsVolume property, which is the path of the volume the Windows folder resides on. Like all path properties, this path always ends with a backslash. This can be used to set the default install point if the author want the install to be on this volume, since ROOTDRIVE will not necessarily be set to this volume. 97-11-16 bench Added script versioning. Darwin now maintains 3 script version values: the current script version, which is written to each generated script file (install or rollback) in the ixoHeader opcode, and the minimum and maximum script versions that are supported. If an attempt is made to run a script whose version is not supported, an error will occur. ----------------------------- Release 0.10.00.3514 ----------------------------- 97-11-13 darwindev Considerable progress made in reducing the amount of required empty tables. DARWIN\data\minimum contains to current minimum required with a full sequence table. Goal is to only require tables that are actually used. 97-11-13 johndelo Added a SEQUENCE action, that simply calls the engine Sequence method with the value of the SEQUENCE property, which MUST be the case-sensitive table name of a sequence table. This is only intended for use by authoring tools to be able to run custom sequences of actions for tasks such as validation, builds, imports, etc. 97-11-13 johndelo Added the ability to launch an install or any other public action from an open database handle, using MsiInstallProduct. The database handle must be passed as the package path using the string value of the integer database handle prefixed with a pound sign '#', i.e. "#27". This is intended only for use during authoring sessions, to allow the install to be tested, and to support running custom sequences, such as validation. Currently, the summary properties are required to be set as in a normal install, but this may be relaxed in future builds if the action is not "Install". 97-11-13 chetanp added support for Registry key (+ value) to be the Key Paths of components. The Component.KeyPath may now null (denoting that the Component.Directory_ be used as the key path) or be either a key into the File table or into the Registry table (governed by the irsRegistryKeyPath bit of the Component.RunFromSource column). 97-11-12 tracyf A new "unified" progress bar scheme has been implemented (i.e. a single, weighted, progress bar across all actions). Also, we've now got a "time remaining" indicator, which typically gets displayed just below the progress bar. IMPORTANT: database authoring changes are required to take advantage of this new functionality (without the changes, progress bars will go dead, but the install should otherwise behave normally). A description of the new scheme, and the authoring changes required, is posted at \\jdelo3\MsiDoc\Progress.doc. 97-11-12 tracyf Support for advancing the progress bar either forward or backward is now built into the Handler and the basic UI (simpler, and necessary so that the "time remaining" feature still works properly when advancing backward). 97-11-12 tracyf The IMsiEngine interface now supports an ActionProgress function, which is a simplified replacement for the Message(imtProgress, ...) calls that were being made by actions that run before InstallValidate. These actions don't report actual progress (since there can be no meaningful progress bar before script execution time), so they now just call ActionProgress to keep the Cancel button alive. 97-11-11 malcolmh The DATABASE property is now private. It's now Database. This property can therefore no longer be set on the command line. 97-11-11 malcolmh Added the GetName property to the MsiStorage object. Regression of the "delete on release" functionality is advised, as the code that does the deleting at release time was changed to take advantage of this new property. ----------------------------- Release 0.10.00.3511 ----------------------------- 97-11-10 chetanp added component thrashing. If there is a different component (id) installed in the same location with the key file matching the key file of our component, then we forcefully install all the files of our component (disregarding the file versions) and mark the other component as absent. 97-11-10 chetanp changed InstallFiles action such that we do not compute files in use, unless we have full UI. Needed to add a new "read-only" UILevel property. ----------------------------- Release 0.10.00.3507 ----------------------------- 97-11-07 davidmck Added version numbering to instmsi.exe. ----------------------------- Release 0.10.00.3507 ----------------------------- 97-11-06 malcolmh In the IxoDatabaseCache opcode the database is now specified as a full path instead of a folder and file. 97-11-06 malcolmh We now drop cabinets when we cache packages in the MSI directory. If we need the cabinets again we'll look for them on the source. 97-11-06 johndelo ODBC tables, actions, opcodes added, not implemented yet. 97-11-06 johndelo When exporting MSI tables that have extended (>127) characters, the codepage will be stored in the .idt file. If the database codepage is not set, the current codepage will be used. When importing tables with a codepage specified, the database will be set to that codepage. Full details in codepage.doc. (\\jdelo3\msidoc) 97-11-06 davidmck We now link with the libcmtl objects rather than the lib itself in the ship build. This should keep us from accidentally adding std clib dependancies. Use extlib.bat in \darwin\tools to create the objects when we take a new lib. 97-11-06 bench "Directory Aliasing": added the feature to allow a path in the Directory table to resolve to its parent's path. Previously each record was required to have a valid sub-directory which was appended to the parent's path. Now, the DefaultDir value may be a '.', which indicates that it resolves to its parent's path. This allows a path to be set to a directory like SystemFolder by default but also be changed by AppSearch. 97-11-06 bench Fixed bug 3228. This caused a slight change in the behaviour of the DirectoryManager. Previously when a path was changed with SetTargetPath (as is done with the browse dialog) all other paths objects whose paths were either equal to or children of the path being changed would also be changed. Now, this criteria must be met AND the path must be a child in the Directory table of the path being changed. 97-11-06 malcolmh I've added a new Control Event, "DoAction". This control event is intended to be used to invoke custom actions. For example, you could have a button on a dialog that, when clicked, invoked a custom action that emptied the recycle bin. 97-11-06 davidmck Changed ship build to use LIBCMTL.LIB, the lego version of the c-runtimes. This should not affect the build since the symbols in this lib will be stipped by the linker. 97-11-06 davidmck Removed the use of malloc from the jpeg routines. We now use the darwin memory allocator Changed the debug memory manager to use a hash table rather than a single linked list for keeping track of allocated memory. Should only affect debug. 97-11-05 malcolmh Msiinfo has been updated to handle validating the strings pools of databases that have 64K+ unique strings. It also now prints the codepage of the string pool. 97-11-05 malcolmh Fixed bugs 3312, 3326. 1) In engine::initialize we now verify that the database storage file has the MSI database storage ID. 2) Views now supports joining long & short columns. 97-11-04 johndelo Note: database schema will be changing to specify the icdLocalizable attribute, changing column specifications from 'S' to 'L' where appropriate. Make preparations now. 97-11-04 johndelo Expanded string pool implemented. When the number of unique strings exceeds 64K, 3-byte indices will be used in the persistent table streams only, allowing up to 16 million unique strings. Of course, these larger databases are not readable on older MSI versions. ----------------------------- Release 0.10.00.3504 ----------------------------- 97-11-03 bench Added MsiSpy directory to the \\united\darwin drop under Samples. This addition should be propogated to \\united\darrel. 97-11-03 malcolmh Made two changes to MsiPath.SubFolders. 1) It now excludes the recycle bin. 2) It takes an optional parameter that can be used to exclude hidden sub folders. 97-11-02 johndelo Column attribute letter 'L' added: localizable string. Returned by MsiGetColumnInfo, used by Export/Import. Currently in column catalog as bit 9 (512), but may change to return string when querying column catalog. 97-10-31 malcolmh Fixed bug 3034. We now support the LOCALIZABLE SQL keyword to indicate that a column is localizable. 97-10-31 chetanp SharedDLL refcounts for component keypaths are now being incremented once for each Darwin-installed product. 97-10-31 chetanp put a check in to assert and fail during component registration/unregistration if the key path of the component is a file that does not belong to that component. 97-10-29 johndelo Fixed OLE registration problems on original Windows95. OLEAUT32.DLL doesn't support current typelib format or UnRegisterTypeLib, so typelib is ignored on Windows95. Programs that can use the typelib also require OLEAUT32. ----------------------------- Release 0.10.00.3431 ----------------------------- 97-10-31 chetanp fixed external shared dll count bug 3148. 97-10-30 malcolmh Fixed bug 2506. We no longer allow creation of a column named "_RowState" via SQL. 97-10-30 malcolmh The BindImage table is no longer required. A missing BindImage table now behaves just as an empty one did in the past. 97-10-30 malcolmh The Icon table is no longer required. A missing Icon table now behaves just as an empty one did in the past. 97-10-30 malcolmh Fixed bug 3286 and 3288. These were both SQL problems. IS NOT NULL didn't work and using the <> operator in an expression with a string literal didn't work. 97-10-30 chetanp Added PuyblishComponent.AppData column for author to specify application specific data associated with Qualified Components. See help on PublishComponent table and MsiEnumComponentQualifiers for more. 97-10-30 chetanp Added Class.Argument column so that authors can provide arguments to LocalServers when invoked by OLE. Made changes to the RegisterClassInfo and UnregisterClassInfo action. See help on Class table for more. 97-10-30 chetanp Changed MsProvideQualifiedComponent to account for optional ApplicationData that may follow the Darwin Descriptor. See doc on PublishComponent table for more. 97-10-30 chetanp Added functionality to MsiEnumComponentQualifiers to return back ApplicationData. See doc on PublishComponent table and MsiEnumComponentQualifiers for more. 97-10-30 MattWe Fixed the UNICODE version of FailAssertMsg(char*) to truncate asserts, rather than allocating memory. (Fixes the problem of an assert because you ran out of memory then trying to allocate more memory...) 97-10-30 bench MsiPatch: support for retaining/ignoring bytes in CreatePatch() is now supported. See help for more info. 97-10-29 malcolmh Fixed bug 3110. Generating tranforms with binary streams should work now. 97-10-29 MattWe Fixed AssertSz variants to no longer allocate memory. They'll now truncate at the maximum length of the internal buffer. (512 bytes ansi/512 characters UNICODE) Also fixed a #define that forced a cast on AssertSz that hid the UNICODE variant. 97-10-28 bench Added ServicePackLevel property which is set to the numeric service pack level if a service pack is installed. ----------------------------- Release 0.10.00.3428 ----------------------------- 97-10-27 johndelo Provided mechanism to reset a stream in a record field.. Calling MsiRecordSetStream(hRecord, iField, 0) on a field actually containing a stream will reset the stream to the beginning. If the field does not contain a stream, it will fail. Feature request - Bug 1380. 97-10-27 malcolmh Added a CopyTo method to the Storage object. This method wraps the IStorage::CopyTo method which allows you to copy one storage to another, while excluding certain streams and substorages. 97-10-27 bench Fixed bug 2934. The problem was that MsiString.Compare(iscWithin...) was returning the number of bytes into the string the sub-string started, rather than the number of characters. All other MsiStrings deal with characters, so this caused problems when this value was passed to other MsiString functions. This is very low-level code but should only effect DBCS string handling. 97-10-26 bench Added AdminUser property, set in Service.SetPlatformProperties, which is set if the user has Administrator priveleges. By convention, this property is always set on Win95. ----------------------------- Release 0.10.00.3421 ----------------------------- 97-10-21 chetanp Component Manager change -we now prevent a Component, which is in the Absent state from going into the Absent state (we make it go to the null state). 97-10-21 MattWe MsiSpy: updated all the installation databases to get the correct column type definitions, and added empty blank tables from schema so that the ISVs can immediately start populating these. (Chetan fixed the column names last night, but we missed the definitions themselves for nullable/size/type) You should now be able to merge these databases into schema, and they pass validation without any errors/ warnings. ----------------------------- Release 0.10.00.3421 ----------------------------- 97-10-20 chetanp the ixoComponentRegisterClient and the ixoUnregisterComponentClient operations are obsolete. ----------------------------- Release 0.10.00.3420 ----------------------------- 97-10-19 johndelo Changes made to Database Import/Export per 9/25/97 e-mail. Binary streams are exported into a subdirectory named the same as the base file name supplied for the table. (no extension) Subdirectories are created only when necessary to hold streams. The files in the subdirectory will be named the same as the primary key value for the row containing the stream column. If there is no dot in the name, the extension .ibd is appended. Thus if you use the file name as the table key value, it will be preserved on Import/Export and uniqueness will be enforced. Current database exports can be converted by simply moving the .ibd files into the proper subdirectory, typically "Binary". The MsiDb tool has be updated to preserve the table names by default in the *.idt archive files. If this is not acceptable, there is and option, "-s", that truncates export names to 8.3 with possible collisions resulting in loss of data. Stream names are determined by primary key value and aren't truncated. 97-10-19 johndelo Internal API for IMsiServices::CreateDatabase changed to take an idoEnum instead of a Bool for open mode. This enum is now the same in both automation objects, and matches the external API as well. It is now passed through intact, enabling all open modes to function. 97-10-19 johndelo Custom action support is now complete, supporting all modes as described in customtb.doc currently on: \\jdelo3\darwin\doc\ or \\xlweb\darwindoc\. ----------------------------- Release 0.10.00.3417 ----------------------------- 97-10-17 chetanp Advertisement Changes - We have added a new ProgId table to allow for multiple progids for a given CLSID and to be able to associate an icon with an extension which has a progid but no corr. CLSID. Also several column names have been rectified to adhere to naming conventions see bug 3161. 97-10-17 chetanp Component Management changes - Prior to this build component with the same Component ID used to be redirected to the same physical location for a local installation. Hence there could not be more than one local instalation on a machine. The component detection mechanism (for MsiLocateComponent) was allowed to return ANY of several installations of a component (even if not installed by the requesting product). The new logic is that a product do not use a locally installed component that it has not installed. Also we do not share sources. A locally installed component is shared by virtue of 2 products wanting to install the component in the same physical location. A the physical files of a locally installed component are removed when the last client of *that* install location uninstalls the component. A component is removed (the rest of the stuff - registry entries,...) when the last client of the component uninstalls the component. Hence we have a new iisFileAbsent state within the Selection Manager that allows us to uninstall files but not uninstall the component. 97-10-17 tracyf Fixed bug 2975, modifying the Selection Manager initialization process so that the installed states of features and components are resolved BEFORE the conditions specified in the Component Condition column, and in the Condition table, are resolved. This allows conditional expressions to make use of the current installed states of features and components. ----------------------------- Release 0.10.00.3417 ----------------------------- 97-10-17 johndelo MsiDatabaseGenerateTransform and IMsiDatabase::GenerateTransform arguments swapped to match doc and usage requirements. The current database (new) is compared to the base database (old). MsiTran command-line args unchanged. MsiTran gives formatted error messages now. 97-10-16 tracyf Modified the Selection Manager so that if a parent feature is changed to the advertised state, and has one or more children that are authored as non-advertisable, the child feature(s) will be set to the absent state. (Before, the child feature's state would not change, potentially leaving it in the uncomfortable position of being installed while the parent is not installed (only advertised). Also fixed a problem in which a parent set to the advertised state was inadvertently being changed to the absent state if any child was changed to the absent state. 97-10-16 bench bug 3132: renamed the "Enable" rollback registry value to "Disable". If this value exists with any data, rollback is disabled. 97-10-16 bench Bumped the database version to .21 to coincide with the schema changes. 97-10-16 bench Changed the interpretation of the Shortcut.WkDir column. It is no longer a foriegn key to the Directory table, it is simply the name of a property defining the working directory (which could be the name of a directory in the Directory table) 97-10-16 bench Made the following table and column names: FileSignature --> Signature Shortcut.IconLocation --> Shortcut.Icon_ Shortcut.WkDir_ --> Shortcut.WkDir ListView.Image --> ListView.Binary_ Icon.IconName --> Icon.Name Icon.IconData --> Icon.Data 97-10-16 bench Removed all help topics for Tables and Actions from msiauto.hlp. Jumps that reference those topics have been updated to reference msi.hlp. 97-10-15 johndelo AutoApi is now merged into Msi.Dll, most of the size increase being the typelib. AutoApi is still built separately for a while (who ever registers last wins). 97-10-15 johndelo Shortcuts will be written to the new CLSID-based format if the IE4.01 or greater shell is detected. 97-10-15 MattWe Added ServiceControl table, and three new actions to go with it: StartService, StopService, and DeleteService Updated testdb to copy a couple of new files (see my first entry today,) and a set of Services sub-features (with related components.) Right now, this just copies the files over. Until InstallService is ready, see me for how to set up a test for these NT only actions. 97-10-15 MattWe Added ClearReg to files built on darwin.rel, and updated copybld to place clearreg in %TOOLSRELDIR% TESTERS: please drop TOOLS\clearreg.exe to darrel. 97-10-15 malcolmh Fixed bug 3143: Crash in MsiInstallProduct. 97-10-15 MattWe Added darwin\data\test\Services, darwin\data\test\Services\simple.exe and client.exe. This is a simple Service for testing the new services actions. To use, run "simple.exe -install" (or testdb will install it automatically when I finish InstallService,) and then run client.exe to make sure it started successfully. You can remove the service via testdb, or run "simple -remove" TESTERS: these files should be added to the drop of testdb. 97-10-15 tracyf Added another level of caching to the process of creating MsiVolume objects. Bottom line: the number of WNetAddConnection calls Darwin needs to make when reading/writing network shares is greatly reduced, speeding up the initialization and file copying processes. 97-10-15 tracyf Fixed bugs 2447, 3125, and 3129, all dealing with the fact that Darwin's WNetCancelConnection calls were failing, particularly on Win95. This was leading to errors involving "Too many net connections" . ----------------------------- Release 0.10.00.3414 ----------------------------- 97-10-14 chetanp fixed self reg bug 3139. we were failing on n/w files. we always impersonate for self reg now. may not run on tied down systems. if we do not impersonate certain selfreg's fail as they themselves try to access the file system from within the call ifthe selfreg file is on the network, this does not work. ----------------------------- Release 0.10.00.3414 ----------------------------- 97-10-13 malcolmh We now use SEH (C exceptions) instead of C++ exceptions. This elminates the code bloat of C++ exceptions while still providing us with the functionality we need. 97-10-13 johndelo Most database and engine API set the last error record, for use by MsiGetLastErrorRecord. The cached record will be cleared after this call or a successfule API call. Functions that set error records denoted in MsiQuery.h. 97-10-13 johndelo MsiFormatRecord will now support a null install handle, in which case only the record parameters are formatted. The API automation uses this to support MsiRecord.FormatText. 97-10-13 bench Changed return of MsiFilePatch.CanPatchFile from a BOOL to an icpEnum. See help for more info. 97-10-12 johndelo Custom action support is now fully implemented according to the 10/12 design spec, except for scripting support. Additional test cases have been added to testdb.msi, but deferred execution and rollback have not been tested. 97-10-12 johndelo API changes as follows: MsiGetFeatureValidStates now returns bit flags, not enum MsiGetLastErrorRecord added MsiVerifyDiskSpace added, simply calls engine function MsiGetComponentPath added, MsiLocateComponent replacement (product code not used yet, until component detect updated) 97-10-10 malcolmh Fixed bugs 3318, 2449, 2450, 2451, 2730, 2446, 2334. ----------------------------- Release 0.10.00.3410 ----------------------------- 97-10-10 chetanp Added support for the Advertise state for individual features in Darwin. This has affected the Selection Manager as well as the Handler code. It has also affected the Advertisement code (shortcuts, Class, Extension, TypeLib, MIME). 97-10-10 bench Moved all files not dependent on the build of Darwin (DEBUG/SHIP/LEGO/...) to a folder called COMMON in the \\united\darwin drop. These files are: msi.h msiquery.h msi.lib msierror.msg mspatch.dll cabinet.dll imagehlp.dll When riched20.dll is dropped it will also fall into this folder. 97-10-10 bench Added the file mspatch.dll which is used by Darwin and the MsiPatch tool to create and apply patches. This file is dropped to the COMMON folder and is installed by instmsi.exe. It is required for the MsiPatch object to run and for Darwin to perform any patching operations. 97-10-10 bench INSTALLFILES: fix bug 3104, caused by the addition of compressed file copies during a "non-cabinet" install. This required re-writing much of the code that deals with source media and cabinets in the ixoChangeMedia and ixoFileCopy operations (outside of the MsiFileCopy object). This code should be fully tested for regression, with an emphasis on cabinets, split files, mixed compressed/uncompressed files, and missing media. 97-10-10 bench Patching: The MsiFilePatch object (built into Darwin) is ready for testing. See MsiAuto.hlp for more info. 97-10-10 bench Patching: The MsiPatch tool (msipat.dll) is ready for testing. See msipat.hlp for more info. 97-10-10 bench ixoChangeMedia: minor change: the cabinet path is now required to be a full path when the cabinet is a file and not in a stream of the package. Previously it was possible to use a file name relative to the path set by ixoSetSourceFolder. No more. 97-10-10 bench MsiPath.TempFileName: added an optional flag. True to return only the file name, false to return the full path. See help for more info. 97-10-09 davidmck Changed how we read in bitmaps to be more efficient. We now read them in a block rather than in chunks. 97-10-09 chetanp Fixed Darwin view object such that the temporary tables created by it do not appear in the catalog tables. Now Scopes need not have special logic to skip the temporary tables when displaying to the user in the Table view. 97-10-09 tracyf Fixed a problem that was affecting Office's oprep: MsiPath was trying to add a net connection each time a path object was created using a UNC path, which would eventually lead to an "extended" network error (too many net connections). 97-10-09 malcolmh Fixed bugs 3113, 1585. Eliminate const IMsiString& problems. Do a shell notify when we register or unregister the .MSI extension. 97-10-09 davidmck Added Imagehlp.dll to instmsi. We now pull cabinet.dll from the tools directory rather than the common directory. 97-10-09 davidmck Added extra stack backtracing to our memory logging. Also made it so we actually log to the debug log if darwin logging is off. 97-10-08 malcolmh Added exception handling to the server's RunScript Function. When an exception occurs in the server you should be greeted by a dialog with relevant information, including the function and offset into that function where the exception occurred. This code is debug only. ----------------------------- Release 0.10.00.3407 ----------------------------- 97-10-06 johndelo Darwin is now built with VC5. The PDB format for VC5 has changed and is incompatible with VC 4.2 debugger. All tools needed to build are now under DARWIN\tools. 97-10-06 davidmck Removed internal imagehlp code for symbols. We now always use imagehlp.dll for resolving function names. ----------------------------- Release 0.10.00.3403 ----------------------------- 97-10-02 johndelo Darwin now builds with VC5 and runs, but we have not updated the build yet. All the tools required have been checked into the project, including the new SLM that supports long file names. I'm aiming for the next release after this one for the switchover. 97-10-02 davidmck Added support in instmsi for replacing the cabinet file while it's in use. Not a big deal for the cabinet file, but probably will be important for riched20.dll which I'm adding later. Changed instmsi to not use Windows apis VerInstallFile and VerFindFile so the in use handling would work. Added version checking to instmsi. ----------------------------- Release 0.10.00.3330 ----------------------------- 97-09-29 johndelo Tables exported with extended characters will be typed with the codepage of the database, or system codepage if database codepage not set. When importing, the database codepage will be set to the first non-neutral table imported. For details, see design spec codepage.doc. 97-09-29 malcolmh Fixed bug 3046 -- processing of /Q option to msiexec. 97-09-29 MattWe Disabled building of gen, util, acme2msi, and the repackager. TESTING: this will result in not dropping several files anymore. I'll send mail with the full list. 97-09-29 tracyf Fixed up the ValidateTargetPaths routine (internal to MsiEngine) to execute significantly faster. Previously, this routine was responsible for about 85% of the time spent in executing the CostFinalize action. Now, it's only 10%, and CostFinalize executes about 6 times faster than before. Look for more costing optimizations coming soon. 97-09-29 tracyf Added support for the ADDDEFAULT install property. This property has long existed, but if assigned a value, it would previously always install the specified feature in the iisLocal state. Now, the specified feature(s) will be installed in the authored state (as determined by the RunFromSource column of the Feature table). 97-09-25 chetanp Added reg_multi_sz support to the IMsiString classes. Added support to IMsiEngine::FormatText to support the sequence [~] which stands for the null character. IMsiRegKey::RemoveValue interface changed - now also takes the value - for reg_multi_sz Added reg_multi_Sz support to the IMsiRegKey object ----------------------------- Release 0.10.00.3325 ----------------------------- 97-09-25 tracyf Fixed a bug in MsiPath which was blocking testing - MsiPath was rejecting any UNC path that included a trailing backslash. 97-09-25 tracyf Fixed code in path.cpp that was breaking UNICODE builds. 97-09-25 tracyf Added an extra parameter to CreateFilePath - in addition to accepting a full path to a file and returning a path object, it now returns the filename portion to the caller. To allow this routine to be fully automated, a RipFileNameFromPath automation wrapper has been added to MsiServices; internally, this wrapper calls CreateFilePath, and just returns the filename string. ----------------------------- Release 0.10.00.3324 ----------------------------- 97-09-24 tracyf Support for non-NT networking protocols has been added to MsiPath. This required the eradication of code in MsiPath which was trying to separate incoming paths into a volume part and a directory part. We now call the system (which in turn calls the installed network provider) to split and validate volume specifications. This required a lot of change in the way that MsiPath connects to remote volumes (for instance, for NetWare shares, we now prompt for the user name and password when necessary). 97-09-24 tracyf Fixed bugs 2747 and 2748 (involving updating the documentation for IxoFileCopy and IxoChangeMedia). These were blocking bugs for testing. 97-09-24 tracyf Changed the GetDriveTypeFromPath method. It is now called GetImpersonationFromPath, and now returns a Bool. It was only being used to determine whether impersonation was necessary based on a path, this being done by checking whether the returned drive type was 'Network'. GetImpersonationFromPath now returns fTrue if the drive type is either 'Network', or 'Unknown'. 97-09-24 tracyf Added a CreateFilePath method to the IMsiServices interface. This allows a path object to be created with a full path to a file (the file part is stripped off by the method before creating the path object). 97-09-24 tracyf Internally, the MsiPath object now stores only relative path information (it no longer keeps the volume information as part of the path). This was necessary to avoid parsing off the volume part at various times, which leads to problems when dealing with non-NT network protocols. (As an aside, making this change got rid of 5K worth of code!). There should be no externally visible effect (i.e. interfaces such as GetPath and GetFullFilePath still return the full path, including volume information, making use of the internal volume object). 97-09-23 bench Added the ability to install compressed files from a cabinet not located in the source tree for the package, both during a "compressed" or "uncompressed" install. This will be useful for patches that want to add files to an install. This required the following changes: 1.) Added the Media.Source column, which defines the folder containing the cabinet referenced by that record. This column is essentially optional as the code works file without it. If either the column is missing or the field is blank, SOURCEDIR is used. 2.) Added the iffCompressed bit (16384) to the possible bits in the File.Attributes column. This bit means that the file is compressed regardless of the value of the MSI Source Type suminfo property. This is the opposite of the iffNoncompressed bit which says the file is non-compressed regardless of the source type. 3.) Modified ixoChangeMedia to accept a full or relative path to the cabinet file. If the path is relative, it is relative to the folder set by ixoSetSourceFolder. See help for more info. ----------------------------- Release 0.10.00.3323 ----------------------------- 97-09-22 johndelo Custom action support for DLLs, EXEs, and property & directory assigsnment has been completed. All modes are functional, sync & async, Custom actions crashes are recoverable. Debug breakpoints may be set with the environment variable "MsiBreak=YourActionName". A debug break will occur just ahead of the call into that action. Samples have been added to testdb.msi; the property TESTACTION must be set to the appropriate type number to fire the action. New custom action doc is available separately. 97-09-18 johndelo Enhanced custom action support. A couple of simple lines of code allowed us to implement a new type of custom action: icaTextData = 3. If icaProperty is also set (48) = 51, then FormatText is called on the Target string and the result set into the property specified in Source. Samples are in the testdb CustomAction table, example: Custom051 51 USERNAME [LogonUser] on[ComputerName] These actions are called by placing their name in the appropriate place in the sequence table, such as just ahead of custom actions that you want to pass properties to. Note that you can use a conditional expression in the sequence entry, and you can invent new property names. Of course this mechansim can be used to conditionally set any property to a formatted text string. If you use icaTextData with icaDirectory (32) = 35, then you can conditionally set a directory path to a formatted text string. For instance, you can insert the user's logon name into a directory path. The example in testdb: Custom035 35 MonthDir [Test][LogonUser]\Months Note that this action must be called after CostFinalize, as that is where the directories are initialized. If you wanted to conditionalize a setting only for Alpha then put "Alpha" in the Condtion column; likewise you could test for platform, version, installed products, whatever. To help debug custom actions, a debug break can be forced immediately ahead of the call to the custom action, by setting the environment variable "MsiBreak" to the name of the custom actions (case-sensitive). Works in SHIP or DEBUG. 97-09-17 davidmck Removed our usage of fdi.lib for decompression. We now use cabinet.dll. Added cabinet.dll to the instmsi cabpack. ----------------------------- Release 0.10.00.3316 ----------------------------- 97-09-15 johndelo Bug 2658, where on NT5 with MSI on server failed when accessing table stream for InstallSequence, Assert replaced with FatalError report and exit. Problem still exists in remote file mapping. 97-09-15 johndelo Date and Time properties now work, which update their internal data whenever the string value is requested. These are now used in the Log header/trailer, and Time is put into the ActionStart template for performance measurements. These templates are in the Error table, built with each build, but which must be inserted into older databases. The old printf format will be supported for a few builds. 97-09-15 bench Fixed bug 2629, which was a problem with FormatText. In the process of doing so, both Engine.FormatText and Record.FormatText have been essentially re-written to share all common code. These functions should be thoroughly tested to make sure they work correctly. 97-09-12 johndelo MSI base DLLs have been rebased to avoid collisions upon load. Non-core system DLLs are now late-bound: OLE32, OLEAUT32, COMCTL32, SHELL32, MPR. There could be some glitches, but Asserts will be displayed on any bind errors in DEBUG. 97-09-12 ivanw Added a new control type: Line. This is simply a line, as the name suggests, used as a visual separator on a dialog. 97-09-11 malcolmh Bug 2938. msiexec's /F option has been updated to support the following: /F[r]|[o]|e]|[d]|[c]|[a]|[m]|[u]|[s] | ... where the letters are a reinstall mode. New support: allow specific reinstallmode. Not specifying a reinstall mode does the same as before.. i.e. a default set of reinstall modes. TEST ~~~~ Command-line parsing changed to support this option so testing around command-line options is advised. If you use the debugmon utility (or something similar) you'll be able to see exactly what msiexec thinks the command-line options are and what properties are getting passed to Darwin, thus negating the need for you to actually verify that Darwin did the correct reinstall. 97-09-10 ivanw Bug 2248: The engine calls the "Browse" dialog (this is a hardwired name) when the target directory is not writeable. To catch if the user cancels the engine sets a property called "BaseBrowse" that changes the behavior of the Cancel button on the Browse dialog. This way the same dialog can be used in more than one place. 97-09-10 tracyf Support for cabinets stored as resources has been removed (since launchers are no longer supported). As a side effect, the CreateCopier function no longer takes an HINSTANCE argument, and the Media table no longer accepts the "@cabinet" syntax. 97-09-10 tracyf Fixed several bugs in MsiPath dealing with DBCS characters in path names. See bug 1237 for details. ----------------------------- Release 0.10.00.3310 ----------------------------- 97-09-09 ivanw At this point the UI supports all the international issues that I know of to the degree that I could test. This is limited by the fact that other parts of Darwin still have unresolved issues with DBCS and codepages. There is some caveat for the UI too: only the Edit and the PathEdit controls support fully all the weirdnesses of different writing systems. Other controls have limited support (this is a limitation of the system), for example comboboxes do not handle all the issues correctly if the input contains a mixture of characters from different writing systems. The MaskedEdit control (used for the PID) is strictly ANSI, this control does not support entering characters from other writing systems. When testing these issues, please keep in mind that one needs the correct (and different) RichEd20.dll versions for BiDi and Far-Eastern systems. To test the BiDi issues one has to set the three BiDi control stylebits and the three BiDi dialog stylebits to have the expected behavior. 97-09-09 ivanw There are massive changes in the behavior and implementation of the Browse dialog. There is a new controlevent: DirectoryListIgnoreChange published by (you guessed correctly!) the DirectoryList control. The DirectoryCombo control typically subscribes to this one. There is a new control attribute: IgnoreChange. If this attribute is turned on the control does not redraw on the property changed message. This was needed to implement the new behavior. The most visible change is that just highlighting a folder in the listview changes the path, but does not change the folder shown in the combobox. On the other hand double clicking on an already selected folder will change the the combobox but will not change the path. We also got away with the confusing Open button on the dialog. Also given up on the idea of splitting the path into two parts and displaying them separately. We also removed the constraint that the previous specification enforced that a user is not allowed to select the root of a volume. All these changes mean that one has to re-author the browse dialogs in existing databases. The best bet is probably to copy the dialog from the Testdb. 97-09-09 ivanw The DirectoryComboPath and the DirectoryListPath control events have been removed. 97-09-09 MattWe MsiSpy: updated copybld to move DEBUG MsiSpy into the Tools\DEBUG, and added the SHIP in the Tools. Added a third file SpyENU.dll to the list. This does NOT go to \\united\darrel yet. See T-GuhanS for drops. (There's an installer, and a bunch of localized files that we haven't decided to drop yet.) 97-09-09 malcolmh Fixed bug 2620: Cleaned up the impersonation code. TEST: ~~~~ All impersonation code is affected. Also affected is getting the user-profile directory from within the service. The following automation interfaces changed: Removed completely: MsiServices.AttachClient, Removed token parameter: MsiConfigurationManager.ValidatePackage MsiServer.ValidatePackage MsiConfigurationManager.RunScript MsiServer.RunScript MsiConfigurationManager.InstallFinalize MsiServer.InstallFinalize DEV: ~~~ As we've found the holy grail, CoImpersonateClient, we no longer pass the client token around. Thus the elimination of Attach/DetachClient. All impersonation calls are now routed through Start/StopImpersonating in vertrust.cpp. Also, GetUserSID and GetUserToken should now be used in lieu of opening the thread token yourself. ----------------------------- Release 0.10.00.3309 ----------------------------- 97-09-08 ivanw As part of reworking the Browse dialog, removed the SplitPath control style. 97-09-08 malcolmh Fixed bug 2712. MsiMerg now persists the errors table. 97-09-08 bench Changed the meaning of the imtCommonData message passed to Engine.Message and Handler.Message. Previously, the parameters of this message were [1]: language id, [2]: dialog caption. Now the parameters are [1]: message type, [2,3,...]: arguments. This change was made to add a new type of message to show or hide the cancel button on the basic UI and to make the message more extensible. See help for more info. 97-09-08 bench MsiTran.exe: Added ability to specify error conditions to suppress when creating or applying transform. See help (or command line help) for more info. 97-09-08 bench Transforms: the iteUpdNonExistingRow constant has been added. This is used to suppress the error that occurs when a transform attempts to update a non-existing row. 97-09-08 bench Transforms: The meanings of the bit flag used when creating and applying transforms has changed. Previously, setting the bit for a particular error condition would force an error to occur when the condition was true. Now, all errors are on by default and the bit must be set to suppress an error. See help for Transform apis for more info. 97-09-05 johndelo MsiApi.Hlp not built, content migrated to Msi.Hlp 97-09-05 johndelo Added arguments for future use for the following API functions, all in Msi.H, non-functional at this time. MsiSetExternalUI: add message filter MsiProvideComponent: add reserved DWORD MsiQualifiedComponent: add reserved DWORD MsiEnumComponentQualifiers: add return for description 97-09-04 ivanw Removed the NewFolder and Browse dialog style bits. These bits were never used on Windows. 97-09-04 ivanw Bug 2065: We want to be able to hide the cancel button on the minimal UI by sending some message. To accomplish this we changed the imtCommonData message type to imtControl. It has three subtypes at this point: icmtLangId, icmtCaption, icmtCancelShow. 97-09-04 chetanp fixed darwin bug 2811, addign SHChangeNotify() calls whenever we create/delete shell shortcuts/ folders. rcollie has reported hitting this bug on random occasions. We need to make sure it is not occuring now. ----------------------------- Release 0.10.00.3303 ----------------------------- 97-09-02 ivanw The SelectionTree control behaves differently if a screen reader is detected on the system. In this case the popup menues are not userdrawy (contain no icons) in order to better support the screen reader. Also the main view of the SelectionTree is different in this case. Since the screen readers can't handle the icons that convey important information in the tree, if we find a screen reader we modify the text displayed in the tree, so it gives the same information in text format that is normally conveyed by the icons. To test these changes, one has to run the dll both on systems with and without screen readers installed. ----------------------------- Release 0.10.00.3302 ----------------------------- 97-08-29 chetanp PISearch (product inventory search) is dropped from Darwin. 97-08-28 chetanp fixed beta1 bug 2780. We now have a modified SQL syntax that allows us to hold and free tables (LockTable and UnlockTable) using SQL. The syntax supported is - CREATE TABLE () [HOLD] ALTER TABLE ADD [HOLD] ALTER TABLE HOLD ALTER TABLE FREE 97-08-28 bench *RELEASE*: added msitool.hlp and msitool.cnt to the DOC folder in the \\united\darwin drop. These files need to be released. 97-08-28 bench Fixed extensions of many files created during an install (but not part of the install). Cached databases have a .msi extension, rollback scripts have a .rbs extension and rollback files have a .rbf extension. Files to be moved on reboot and install script files still have .tmp extensions. 97-08-28 bench MsiPath: Updated TempFileName to accept an optional prefix and/or extension for the name of the created file. See help for more info. 97-08-28 bench MsiPath: Updated SetFileAttribute and GetFileAttribute to act on the directory represented by the MsiPath object if the supplied file name is null. 97-08-27 ivanw To support some the accessibility tools better we have to make a few slight changes to the UI tables in the database. If you fail to make these changes in your existing database, it won't break anything, but the screen reader won't pick up all the information. The first change involves the Control_First column of the dialog table. This one describes what control has the focus when the dialog is created. For certain controls that normally don't have a description of their own, the screen reader tries to find the text control immediately preceding this control and use that text as the description of the control. Unfortunately the screen reader does not realize that the tab order of the controls forms a cycle, i.e. the last one in Z-order preceds the first one. To work around this we have to make sure that if there is a text describing an Edit, PathEdit, Combo, DirectoryCombo or Listbox control, this text comes in Z-order right before the control. What this means in practice is that if you have one if these controls as having the focus first, you should enter instead the corresponding text control in the Control_First field. Since a static text can't take the focus, your edit (or PathEdit, etc) control will have the focus, but the screen reader will be able to pick up the right text. The other change involves the Text field in the Control table. For the VolumeCost, ListView, DirectoryList and SelectionTree controls this field is currently empty. I suggest that you enter some text there that describes the function of the given control. This string will be never seen by most users, but it will be used by the screen reader to describe the control for a vision impaired user. 97-08-26 malcolmh Fixed bugs 2577, 2434, 2435, 2437, 2440, 2442, 2714, 2715, 2452, 2540, 2263, 2165 ----------------------------- Release 0.10.00.3225 ----------------------------- 97-08-22 chetanp fixed bug 2699. MsiAP should now be working with transforms being passed in as well. 97-08-20 ivanw Put in some hacks so the Edit, PathEdit and ScrollableText controls don't fail even if the riched20.dll is missing. 97-08-20 ivanw Changed the Edit and PathEdit controls. To support BiDi and FE systems better these controls now use the "RichEdit20W" control type instead of the "Edit" type. This should mean no visible difference on an English system. Since the core of the control has changed it has to be tested again, to make sure that it still works correctly. We won't be able to test the BiDi and FE functionality untill we get the latest and greatest version of the RichEd20.dll that supports those languages. 97-08-20 ivanw The Handler now requires the riched20.dll to be installed on the system. This dll will be installed with Darwin as the part of the service pack. This DLL is present on NT4. If you don't have it on your Win95 machine, probably you can just copy it from your NT machine. As soon as I get the latest version (that handles BiDi and FarEast correctly) from the RichEdit group I will check it in with Darwin. 97-08-19 malcolmh Fixed bug 2654. On a locked-down system we were failing to delete the InProgress key. We now impersonate correctly and therefore can delete the key. ----------------------------- Release 0.10.00.3218 ----------------------------- 97-08-14 bench fixed bug 2680 by making all self-reg errors of the abort/retry/ignore variety. 97-08-13 bench fixed bug 2657, the AV in CODBCDatabase. See the bug for more details. 97-08-13 malcolmh Fixed bug 2166 -- display help when invalid args are passed to msiexec 97-08-12 mattwe Repack wiz: added alpha support to internal installer. (also added to Beta1 tree.) ----------------------------- Release 0.10.00.3212 ----------------------------- 97-08-11 ivanw Implemented the ability to change the font on any control. We can change the type face, the size and the style (bold, italic, etc) for all controls. The font color information is used only for static text controls. For all other controls the color information is ignored. To see this in action check out the regular first install wizard sequence in testdb. For some wilder examples try testdb with the UITEST property set. ----------------------------- Release 0.10.00.3208 ----------------------------- 97-08-07 johndelo MsiTool.mak has been moved to DARWIN\src\tools, to simplify building tools and customs actions for the ISV release, and has been fixed to work with multiple CPPs and long file paths. All tools have been updated, and the samples fixed where broken. ISV release is on \\tcoweb\isvkit. Help for tools is now build as MsiTool.hlp. MsiSpy is now built (DEBUG only) - try it. 97-08-07 MattWe Testing: From now on, any reference you can find to "Darwin" should probably be a bug. 97-08-07 MattWe Databases: Removed all Darwin and internal contact information references. 97-08-06 malcolmh All table schema were changed to correctly identify nullable columns as such. Nullable columns have an upper-case type-identifier letter in the .idt files. 97-08-06 MattWe Repackaging wizard: Added darwin\src\tools\repack\support\repackdb\*.idt to build the final golden beta repackwiz template database. make win repackdb builds from these IDTs, totally ignoring template/schema. !!ANYONE MAKING CHANGES TO SCHEMA or TEMPLATE OTHER THAN NULLABLE COLUMNS FOR BETA1 SHOULD CONTACT MATTWE!! 97-08-06 bench Made these changes to the file set installed by instmsi: removed msiauto.dll, msiauto.hlp and msiauto.cnt. Added msi.hlp and msi.cnt. ----------------------------- Release 0.10.00.3205 ----------------------------- 97-08-05 bench Fixed relnotes tool to handle cookie locks on the project. Updated the build script to handle cookie locks when dealing with relnotes.txt and to eliminate the merge conflicts. 97-08-04 malcolmh We are now using CoImpersonateClient to impersonate instead of ImpersonateLoggedOnUser. CoImpersonateClient does the right thing in all cases. 97-08-04 malcolmh We reverted to using HKEY_CLASSES_ROOT for OLE and Darwin goop. Anything you're used to seeing in HKCU\Software\Classes will now appear in HKEY_CLASSES_ROOT. This change was required by NT for their Beta 1. 97-08-04 johndelo MsiExecuteRecord has been removed from the external APIs--dangerous and unsupportable. MsiFormatRecord has been added. MsiOpenDatabase will now accept an output database path (old client code will still work without change). See MSIQUERY.H or AUTOAPI.HLP for details. MsiGetProperty and MsiSetProperty work with the UIPreview object/handle (no other engine methods do, however). 97-08-01 mattwe Repack installer updated for the files moved all over the place. #2556 97-08-01 johndelo Non-ship components and tools have been renamed to have the same names as ship components and tools. This facilitates debugging with applications and the OS, which bind to Msi.DLL. SHIP, DEBUG, and LEGO are now built in different directories, under DARWIN\build, but are delivered and released to the same structure as before. Tools are built both SHIP and DEBUG, but only SHIP tools are released, except for repackager and the API automation, which have their DEBUG build in a DEBUG subdirectory. The old MSI.HLP that we build has been renamed MSIAPI.HLP to avoid conflict with the MSI.HLP that DOC drops to us. MSIAPI.HLP contains describes the automation layer (autoapi.dll) that sits on top of the MSI API functions and currently contains details that are not yet integrated into MSI.HLP. Eventually MSIAPI.HLP will get merged into MSI.HLP and will be removed. 97-08-01 t-caroln MsiVal.exe -- fixed bugs 2177 and 2510 for validating InstallSequence and Required values. These validations can be turned off by using msival.exe {database} -OFF. These validations require the _Required, _InstallValidate, and _Sequence tables. Information on how this is validated is in msiauto.hlp under TOOLS and Validation and in the msival.cpp file in %DARWIN%\src\tools. 97-07-31 bench Here is the summary of changes that have been made to the drops on \\united\darwin. These files have been moved and/or renamed: [all files in DEBUG and LEGO folders renamed to match files in SHIP folder] TOOLS\msigend.* -> TOOLS\DEBUG\msigen.* TOOLS\msiutild.* -> TOOLS\DEBUG\msiutil.* TOOLS\msipatd.* -> TOOLS\DEBUG\msipat.* TOOLS\msilocd.* -> TOOLS\DEBUG\msiloc.* TOOLS\autoapid.* -> TOOLS\DEBUG\autoapi.* TOOLS\rpkwizd.exe -> TOOLS\DEBUG\rpkwiz.exe These files have been added (not sure why these weren't being dropped before): TOOLS\msimerg.exe TOOLS\msimerg.map TOOLS\msimerg.pdb TOOLS\msiinfo.exe TOOLS\msiinfo.map TOOLS\msiinfo.pdb The files have been removed: TOOLS\regmsid.* TOOLS\regmsil.* TOOLS\msitable.* TOOLS\msidbd.* TOOLS\msivald.* TOOLS\msitrand.* TOOLS\msimergd.* TOOLS\suminfo.* TOOLS\msiinfod.* The moved files should move to identical locations in the \\united\darrel release. All of the appropriate (.exe,.pdb) added files need to be propagated to the \\united\darrel release. 97-07-28 t-caroln Enabled/fixed UNICODE compilation of tools --> msimerg.exe, msidb.exe, msitran.exe, msival.exe, and msiinfo.exe 97-07-25 MattWe MsiGen: #2439. Fixed additional problems with rolling all the profiles into a single one. (Legacy installs tend to install to the user, Default User, and All Users. We have to smack them all into one, as well as the registry keys and shortcuts.) (The above note didn't seem to check in previously. Don't quite know why.) ----------------------------- Release 0.10.00.3125 ----------------------------- 97-07-24 johndelo The MsiSetLogMode function (which was non-functional) has been replaced with EnableLog, which takes three parameters: logmode, logfile, append. See Msi.H or autoapi.hlp for details. This function and SetInternalUI will be use for subsequent engine creation calls in the current process. 97-07-24 malcolmh Log modes are now defined in msi.w. 97-07-24 malcolmh Changes that affect MsiSetInternalUI and MsiSetExternal UI: - Both of these APIs now return the old value upon success. - Added 2 new INSTALLUILEVEL enums for the API: INSTALLUILEVEL_DEFAULT and INSTALLUI_LEVEL_NOCHANGE. The default UI level means that we will choose internally (within the API) what level to use. Currently we choose Basic in all cases except when MsiOpenPackage/OpenProduct is called. In this case we choose no UI. INSTALLUILEVEL_NOCHANGE, when passed in to the API means that we don't change the current UI level. When returned from the API it means that the UI level was not changed because an invalid UI level was specified. - The HWND parameter of MsiSetInternalUI was made to be a pointer. If this pointer is NULL then the HWND is not changed. If the pointer is not null then the HWND is changed and the old HWND is returned through the pointer. 97-07-24 t-caroln Fixed bug 2308, Validate on Delete. It does limited validation to notify one if the row that you intend to delete is pointed to by some other row in the same (or other table). It does not cover embedded strings with properties resolving to the row (this was punted) and it does not cover a delimited list of table possibilities (punted as well). If a row to be deleted is referenced explicitly elsewhere (check KeyTable column of _Validation table) then the error for the primary key field(s) of the row to be deleted is MSIDBERROR_REQUIRED (iveRequired). 97-07-24 MattWe MsiGen: 2439 -- picks up shortcuts from All Users, 2482 -- missed letting deferred registry keys fall back to the registry as part of our "re-register everything" strategy, and changed the repackager not to advertise shortcuts in the StartupFolder. 97-07-23 johndelo MsiViewModify return value ERROR_INVALID_DATA is used when a validate request fails, and indicates that errors can be access with MsiViewGetError. MsiViewGetError does not return anything for other errors. 97-07-22 chetanp change to MsiProcessAdvertiseScript. See bug 2444. ----------------------------- Release 0.10.00.3122 ----------------------------- 97-07-21 johndelo The Msi API automation layer now has its own help, built as part of MSI.HLP for now. All but 12 engine functions are rough-documented, and enumerations have been added. 97-07-21 malcolmh Bug 1804, the blocking Memphis bug, has been fixed. ----------------------------- Release 0.10.00.3118 ----------------------------- 97-07-17 johndelo Handle argument removed from MsiCreateRecord, allowing it to be automated. MsiRecordClearData and MsiViewGetColumnInfo added and automated. 97-07-17 MattWe MsiGen: bug #2373. Fixed a problem generating the unique property table names for targets of shortcuts outside our install. 97-07-17 malcolmh Attempted a fix to the "Service did not respond in a timely fashion" bug. 97-07-17 malcolmh Fixed a bug in msiinfo's string pool validation. It shouldn't crash any more. 97-07-16 t-caroln Validation -- fixed bug 2380 where the msival.exe tool encountered an error during validation of the Office 9 database. Fixed the SQL query statement that was erroring. 97-07-15 MattWe RepackWiz: did a secondary code review on A-BILLHU's code, and added asserts on Set/GetStrings, and wrapped APIs that returned error records. We were getting memory leaks whenever we had an error, and the message wasn't being displayed. That's fixed now. Also fixed a minor icon problem, bug #2104 97-07-15 swalker added 2 new tools to the project: DlgPrev and DlgBrows. DlgPrev is a tool for previewing all the dialogs and billboards defined in an msi database. DlgBrows is similar, but lays the dialogs out in a tree control, so each dialog has as its children any controls that do a spawndialog or newdialog event. This lets you see how the dialogs are connected, as well as previewing them. The exe's should be in %darwin%\tools\, and the source can be found in %darwin%\tools\src\. ----------------------------- Release 0.10.00.3115 ----------------------------- 97-07-14 t-caroln Fixed bug 2343. The fix for this bug was adding a new column to the _Validation table called 'Localize'. This column is non-nullable and an integer column. A zero stands for 'not localize', one stands for 'string table localize', two is reserved for future use, and three stands for 'UI related localize'. All primary key columns should be set to zero. Validation will check for this condition. However, this column is optional. If your _Validation table does not contain this column, then validation will skip validating it. This column will be used by the custom parser Espresso people. 97-07-14 MattWe MsiGen: Bug fixes 2311(Updates for 0.20 schema change, and added population for new Class.VIProgId,) #2239: re-fix for REG_DWORD population of the registry table, and as close to a fix as we're going to get for 2216. We've got apps registering typelibs by hand, and fool the repackager into dropping keys that we assume are registered by a typelib. 97-07-14 bench fixed bug 2280. As a result, rollback is no longer performed for changes made by advertisement (MsiProcessAdvertiseScript). Since an arbitrary HKEY is passed in to Darwin, there is no way of knowing where reg values are being written, so the changes being made can not be rolled back. 97-07-14 t-caroln As part of the fix for bug 2155 dealing with the automation API, the MsiViewGetError api now returns two more enums --> MSIDBERROR_MOREDATA and MSIDBERROR_INVALIDARG. Also, the MSIDBERROR enums have been re-ordered with the upcoming bump in the database version. 97-07-14 bench The .pdb files have been re-added to the SHIP and PROFILE drops on \\united\darwin. These files need to be released to \\united\darrel. This was done upon request from Office. 97-07-14 t-caroln Fixed bug 2289 dealing with transforms (only occured in the ship version). 97-07-14 chetanp the shortcut, progman, registry, removeregistry, inifile, removeinifile tables have changed to incorporate a separate identifier key column for the "localisable keys" problem. the shortcut.shortcut column is now called shortcut.name. the class table has a new VIProgID column for version independent prog id.. 97-07-11 MattWe Repack: Added src\tools\repack\readme.txt to the darwin source tree. This is our installation/run "readme" file. It's primarily owned by JeffLar. Updated copybld to copy to %TOOLSRELDIR%\Repack.txt. TESTERS: THIS FILE SHOULD BE DROPPED TO tools\Repack.txt. It is the same file for all processors and builds. It has no version. 97-07-11 bench Added the ROLLBACKTEST property. When set, this property forces rollback to be performed at the end of an install. This is debug-Darwin only. 97-07-11 MattWe MsiGen: NOW bug #2288 fixed. Removed the SOURCEDIR entry from the property table. For cabinet installs, this probably should have been ignored anyway. Worked fine on several machines, pukes on Rob's. ----------------------------- Release 0.10.00.3111 ----------------------------- 97-07-10 t-caroln Validation -- fixed bug 2286 to prevent validation of temporary columns (as these would always fail validation since they wouldn't have entries in the _Validation table). If the column type happens to be temporary, validation simply returns no error (for that field, or in a record, the field would remain null). 97-07-10 t-caroln Fixed bugs 2283 and 2284. 2283 dealt with MsiRecordGetString not returning a string even if the field is of type integer (the documentation says it will convert the int to string). Fixed it so that it now will return the string or integer converted to the string. If the field is a stream field, it is an invalid data type. Added the MsiDatabaseIsTablePersistent api. It returns an MSICONDITION enum that describes the state of a table passed as a parameter (MSICONDITION_ERROR = invalid handle or invalid parameter, MSICONDITION_NONE = unknown table, MSICONDITION_FALSE = temporary table, MSICONDITION_TRUE = persistent table). 97-07-10 MattWe MsiGen: Bugs# 2274 (Added directory remappings for all system properties for logged on user, because sysdiff /m doesn't remap registry entries, just files), 2239 (sysdiff spec changed), 2229 (removed SOURCEDIR from directory table), 2212 (for zero length binary blobs, now put nothing in value, instead of "#x"), 2170 (removed assert), 2261 (removed even more informational, but non critical, asserts), 2218 (fixed an extension table population side effect bug) 97-07-10 bench Patching is back! Added the CreatePatch and ApplyPatch methods to the MsiPatch tool (contained in msipat.dll). ApplyPatch will eventually move into Darwin. These methods use the SmartPatch technology. See msipat.hlp for more info. 97-07-10 ivanw The following three controlevent have been removed: (as I mentioned in my 6/24 e-mail) SetPath, CheckPath and CheckExistingPath. To replace these in your database use SetTargetPath, CheckTargetPath or CheckExistingPath respectively; followed by an EndDialog Return event. Make sure you set the correct order for these two events. 97-07-09 ivanw Bug #2219. Reworked how the validation of a control locks a dialog from being closed. As part of this change, the IMsiEvent::ReadyToChangeFocus() and the IMsiControl::ReadyToLoseFocus() methods have been eliminated. Added a new dialog attribute: Locked. 97-07-09 bench Fixed bug 2254. Prior to this fix, Darwin would only prompt for reboot if a file was scheduled to replace another file on reboot. However, on NT when rollback is enabled there is never a need to schedule a rename on reboot because an in-use file can be moved. Thus, when a file was copied and the existing file was in use the existing file was moved and reboot wasn't prompted for. While reboot is not necessary in this case to get the installed file to the correct spot, it is necessary to get whatever is holding the old file to hold the new one instead. In short, we now detect when a file is in use and prompt for reboot even though no renames are required. 97-07-09 t-caroln Validation -- fixed bug 1706 dealing with file versions. the Version category is only used in the File.Version column. It now does an extra check. If a Version is authored (meaning 1.2.3.4), then a language is required in the language column. If the file doesn't have a language associated with it, then it is considered language neutral and the author will put a zero in the language column. The following are examples of valid/invalid version - language pairs in the file table: 1.2.3.4 0 // valid, version + language 1.2.3.4 (NULL) // invalid, version but no language (NULL) 1033 // valid, language but no version (i.e. typelibs) Testdb (NULL) // valid, companion file but no language Testdb 1033 // valid, companion file and language 97-07-09 t-caroln Transforms -- fixed bugs 2131, 2083, and 2084. These were re-activated because transforming wasn't working correctly when adding additional columns or additional tables to database already containing more than one table. 97-07-09 bench The msi.hlp and msi.cnt in the \\united\darwin drop are now being copied from \\oceania\hlp\msi. The msiauto.hlp and msiauto.cnt files continue to be built and copied from the build machine. ----------------------------- Release 0.10.00.3108 ----------------------------- 97-07-08 chetanp We now place the shortcut and cached transforms into the "%userprofile%\msi folder in place of the "%userprofile%\applications and %userprofile%\cache folders. ----------------------------- Release 0.10.00.3108 ----------------------------- 97-07-07 malcolmh Added an option to msiinfo to validate string pools. Use msiinfo(d) database.msi /D to verify that the string reference coutns are correct. The string pool will be displayed along with any errors. 97-07-07 t-caroln MsiTran(d).exe -- fixed bug 2231 so that it doesn't crash whe not having arguments (meaning just typing msitran(d).exe won't cause a crash). 97-07-07 bench Release process: removed the .pdb files from the SHIP and PROFILE folders of the drop. (they were never being dropped for PROFILE builds) ----------------------------- Release 0.10.00.3104 ----------------------------- 97-07-03 t-caroln Fixed bug 1864 -- not finding missing columns during validation. this is done in the msival(d).exe tool now (none of the missing column code is inside Darwin). The missing columns validation is based off of the _Validation table, meaning the _Validation table is considered to have an entry for every single column in the database. If one adds a table/column, one has to add the corresponding entry to the _Validation table. If one deletes an optional column (it would be better to leave it there and have null data), then he/she would have to remove the corresponding entry from the _Validation table. 97-07-02 bench Modified Services.CreateFileStream and CreateStorage to impersonate if necessary before accessing the given file. If running as a service and accessing a network location, impersonation is performed. Removed the code to do impersonation from the execution operations that call these methods. 97-07-02 t-caroln Fixed bug 1178 dealing with checking the string lengths against the lengths set in the column definitions. If the length is zero, then the string can be infinitely long. If it is nonzero, then the character count must be less than the length. If this fails, the error enum iveStringOverflow is set. The MsiViewGetErrorAPI would return MSIDBERROR_STRINGOVERFLOW. 97-07-02 bench Added the profile build to the \\united\darwin drop. The profile build is located in the PROFILE folder beside SHIP, DEBUG, etc.. This folder is dropped in the x86 folder only. The files contained in this folder are identical in name and number to those in the SHIP folder. The appropriate files need to be released. 97-07-01 ivanw Updated the IceCap files to version 3.51. Wrote a short document under doc/icecap/start to help the first time users of the profiler. Updated the batch file to reflect changes in our code. 97-07-01 t-caroln Transforms -- fixed bug 2084 dealing with application of a tranform that creates a new table. this bug had been fixed, but that was only if the new table that was added had only one column. the fix now allows the new table to contain more than one column. ----------------------------- Release 0.10.00.3101 ----------------------------- 97-06-30 t-caroln Fixed bug 2162 for msialter. Also commented out the Validation and msidbval targets in the makefile (for building the validation dll and msidbval.exe). 97-06-30 t-caroln Validation -- Fixed bugs 1551 and 1743. This required adding two new validation categories --> Cabinet and Shortcut. Shortcut is used in the Target column of the Shortcut table. If the string does not contain any brackets (meaning properties], then it is validated as a valid identifier that is a foreign key into the feature table. Else it is validated as a KeyFormatted string. For cabinet, it is used in the Cabinet column of the media table. If it is preceded by a # or @ sign, then it must contain a valid filename afterwards (which is the name of the cabinet). 97-06-29 t-caroln Fixed bugs 2138, 2139, and 2140 dealing with the database query external API's. 97-06-27 t-caroln Updated help for transform error conditions when calling SetTransform (as iteNone, iteAddExistingTable, iteAddExistingRow, iteDelExistingRow, and iteDelNonExistingTable now work) and added a reference to the MsiMerg(d).exe tool under the TOOLS section. 97-06-27 t-caroln Fixed bugs 2131, 2132, and 2131 dealing with transforms. Due to the fix for bug 2079, the msitran(d).exe tool had to be updated to take into account the output of all integers as longs. The fix for 2079 also caused the assert in bug 2133 as it also didn't take into account that the column def in the transform file was now a long instead of a short. Bug 2132 dealt with error conditions when setting a transform. It wasn't ignoring the error if we told it too by specifying iteNone as the error condition. 97-06-27 t-caroln Fixed bugs 2134 and 2135 with the MsiOpenDatabase API. It now checks to ensure that the handle is not zero and that the database path string pointer is not zero. 97-06-27 t-caroln Makefile -- added target for msimerge to build the console merge tool app. This tool is msimerg(d).exe. MsiMergd.exe should be released to TOOLS. ----------------------------- Release 0.10.00.3027 ----------------------------- 97-06-26 t-caroln Helpfile -- Updated transform section of help and the GenerateTransform and SetTransform methods of the database. Also added help on the MsiTran(d).exe tool which uses the external API to apply or generate a transform and which can be used to view a transform. 97-06-26 t-caroln Makefile -- add msitran target to build the MsiTran(d).exe tool. This tool uses the external API and has options for applying a transform, generating a transform, and viewing a transform. Use msitran(d).exe /? for the option requirements. Both msitran.exe and msitrand.exe need to be released to the TOOLS directory. 97-06-26 t-caroln Changed the CMsiDatabase::SaveToStorage, CMsiDatabase::DropTable, CMsiDatabase::ImportTable, and CMsiDatabase::LoadFromStorage methods. In SaveToStorage, if there are no rows in the table, then we do not create the empty stream. (However, the table is still there, it's just in the table and column catalog). This shrinks the size of the databases. The other methods had to be changed to account for the fact that the stream may or may not be there (depending on whether or not the table has any rows). 97-06-26 t-caroln In order to fix bug 2084, other changes in the database had to be made. During a transforming, if we have to add a column to the column catalog, we mask off the persistent bit (and then put it back when CreateColumnsFromCatalog is called). This allows for the correct calculation of cbFileWidth so that we don't take into account the new columns (which would mess up the reading of the stream during CMsiDatabase::LoadFromStorage.) The count of the persistent count includes all of the columns (even the new ones), but the loaded column count is for those columns that were not recently added during transforming. So, instead of looping until the persistent count of columns, LoadFromStorage loops through the loaded column count so it reads correctly from the stream. This required adding a new inline method to the CCatalogTables class so that it sets the loaded column count member variable and then calls the CMsiTable::LoadFromStorage method. The new method in CCatalogTable is LoadData. 97-06-26 t-caroln Fixed bugs 2079 (again) and 2084 for transforming. Because want to preserve the iMsiNullIntegerValue, all integers are output as longs (even if the column def is short). This ensures that if a column is supposed to be null, it will become null during the application of the transform. To fix the add a new table bug (2084), made changes to transforming. Now when calling ApplyTransform, we immediately transform the table and column catalogs as well as transform any table loaded in memory. All other tables that require transforming are marked as needing a transform and will be transformed when loaded or the database is committed. 97-06-26 MattWe MsiSpy: Added "spy" option to make (e.g. make debug win spy). Builds t-guhans' tool for viewing installed products on your machine, or for opening a database, and finding out how much of it was installed. Sources: darwin/src/tools/msispy. Builds msispyu(d).dll and msispy(d).exe. This is not currently being built on the build machine but may be added later. 97-06-25 bench Changed makefile so that install*.exe is no longer built with MAKE WIN DEBUG. It can still be built with MAKE WIN DEBUG INSTALL 97-06-25 malcolmh Fix bug 2073. PackageName value is now correct during floppy installs. 97-06-25 malcolmh Fixed bug 1506. We now use HKEY_USERS\SID instead of HKEY_CURRENT_USER in the Installer API. 97-06-25 malcolmh Fixed bug 2071. We now always use the specified package for Admin installs instead of looking in the registry. 97-06-25 Tracyf As part of the fix for bugs 1862 and 1863, Darwin now stores the full UNC path (if applicable) as the keypath when registering components. Note that for Beta 1, this is done only for Microsoft network connections (i.e. for server connections to Novell, Banyan, etc. we still store drive letter paths). Another side effect of the fix is that the MsiPath interface now sports a new method: GetFullUNCFilePath. 97-06-25 chetanp added code to create a temporary "reverse" script for product unadvertisement (MsiProcessAdvertiseScript). Previously we were calling ExecuteRecord on the individual records of the script for undoing it. Now we put the reverse records in a temp script and call RunScript on it. This is necessary for rollback. ----------------------------- Release 0.10.00.3025 ----------------------------- 97-06-25 mattwe RepackWiz: removed msiauto(d) from repkinst.bat (Bug #2097) ----------------------------- Release 0.10.00.3025 ----------------------------- 97-06-24 t-caroln Fixed bugs 2079 and 2083 dealing with transforms. The iMsiNullInteger value was not handled correctly if the column was of short integer type. To correct this, if iMsiNullInteger is returned, then 0xFFFF is written to the transform stream and checked for when reading back from the transform stream. Also, when adding a column to an existing table, GenerateTransform now generates the correct transform file, with the column listed in the column catalog and any values for the new columns listed as updates for that particular table stream. 97-06-24 ivanw Added three new control events: SetTargetPath, CheckTargetPath and CheckExistiingTargetPath. These three will replace the existion SetPath, CheckPath and CheckExistingPath control events. The old ones do what their names suggest plus they do what EndDialog Return would do. The new ones do just what the name says, and you have to add a separate EndDialog or SpawnDialog or some other event to do the transitioning. This way the functionalities are clearer and we also provide greater flexibility. (the old ones worked properly only on a child window) Temporarily both the old and new events are supported. Within a week the old events will be removed. To prepare for this, in the Controlevent table you have to remove the old events by two lines, the first one is the appropriate new event, the second line is a EndDialog Return. For an example check out the Testdb. ----------------------------- Release 0.10.00.3024 ----------------------------- 97-06-23 malcolmh Fixed bugs 1862, 1884, 1974, 1977. We have a temporary (until Beta 2) to allow the conman's LocateComponent to return the actual install state of the 'active' component. Beta 2 will provide a real solution with the complete implementation of the sourcelist spec and the resolution of our component management strategy. 97-06-23 malcolmh Fixed bug 1797. 97-06-23 bench Bug 2027: Fixed the path object to accepts paths of the form c:\subdir\\\\subdir2\\\subdir3. When the path object gets a path of this form, the path is "normalized" to remove any extraneous backslashes. This effects the CreatePath and AppendPiece functions. 97-06-21 mattwe MsiGen: Bug #2055 -- Added functionality to repackage shortcuts to directories, both advertised, unadvertised, and files/directories not in our installs via properties. 97-06-20 mattwe _assert.h: Changed implementation of FailAssertSz to use MsiString. It didn't check the length of an incoming message, and its template form of ("assert in file: ") could have overflowed the buffer itself with a very long source file name. Consequently, it trashed memory. Now it works for arbitrarily long messages. Bugs: #2055, 2058 ----------------------------- Release 0.10.00.3020 ----------------------------- 97-06-20 mattwe MsiGen: Bugs 1796 - increased internal buffer size for lines from INF, as well as added line truncation ability. Bug 1897: Trivial fix to add another "flag" value indicating binary values from the INF. New sysdiff apparently uses a new value to mark them. Bug #2047 -- caught invalid or previously unknown GUIDs during a repackage. (later keys like FILETYPE referred to GUIDs that weren't registered under a CLSID entry.) ----------------------------- Release 0.10.00.3020 ----------------------------- 97-06-19 malcolmh Clearreg has been updated to reflect new registry layout. 97-06-19 malcolmh Updated ixoProductRegister and Conman::RegisterProduct to include the new bunch of data required by the registry spec. *WARNING*: This will break all old install scripts. 97-06-19 malcolmh Added option /T to msiexec to support uninstall via a product code. This was required to support the logo requirement for a command-line that will uninstall a product. 97-06-19 malcolmh Fixed bug 1908. We now cache the product database in %WINDOWS%\MSI. An operation, ixoDatabaseCache, has been added to perform this operation. It caches the database and registers the location in HKLM\SW\MS\Windows\CurrentVersion\Uninstall\LocalPackage. The cached database is costed. When we cache the database we drop any cabinet streams it contains. This currently results in no reduction in size of the database, but by Beta 2 it will. You can for now use dfview to verify that the cabinet streams are gone. The database is removed when the product is unregistered. So, this might beg the question, "How do we determine the source of an installation?" Here's the short answer: 1) If the app has not been advertised or installed: - If SOURCEDIR is specified on the command-line then it is used as the source - Otherwise, we assume that database is in the root of the source 2) If the app has been advertised: - We used the advertised source source location. 3) If the app has been installed - We use the source location that was used at first-run. - If the first-run source is unavailable then we use SOURCEDIR if it is specified - Otherwise, we can't access the source so we can only do configuration that doesn't require hitting the source Check out HKCU\SW\Classes\Installer\... Products\{ProductCode}\SourceList to see which source (LastUsedNet value) and Package (PackageName value) was advertised (or placed at install-time if there was no explicit advertisement) 97-06-19 malcolmh Fixed bug 1907. Changed the locations of almost all of Darwin's reg keys. See the Registry spec (http://office/web/specs/tco/darwinregistry.html) for most of the details (full details are forthcoming). Two sets of changes were made. First, we changed where we write OLE registration goop at advertise time. This now goes into HKCU\Software\Classes as opposed to HKCR. We write Darwin's advertised information to HKCU\Software\Classes\Installer. Second, we've moved our local machine keys. We have many keys under HKLM\SW\MS\Windows\CurrentVersion\Uninstall. Logo requirements state that we must put a bunch of values, and we don't want to needlessly duplicate them. We have some keys under HKLM\SW\MS\Windows\CurrentVersion\Installer as well. 97-06-19 mattwe MsiGen: Bug# 2022, and partial implementation of Work Item #1608 (icon executables) #1608 needs to be enabled by work in RepackUI, and needs additional work to draw icons from executables associated with extensions. Known bugs: Darwin Costing bug #2036 97-06-19 mattwe Rungen: Added support to use icon templates. Needs same work done on RepackWiz 97-06-19 mattwe Repack: Added NOUI property to the repack template 97-06-19 mattwe MsiGen: updated for CreatePath API change 97-06-19 mattwe RepackUI: updated for CreatePath API change 97-06-19 mattwe Repack: added rpkicon to copybld, shove, and repkinst 97-06-19 mattwe Repack: Added file rpkicon.exe to \Tools. It must be dropped. It's the same file for all platforms, and is a resource only executable. 97-06-19 mattwe Util: updated for new path object. Should build now 97-06-19 bench Enhanced the /q option of msiexec to specify any of the four UI levels: Full, Reduced, Basic or None. The syntax is /q [f|r|b|n]. Only the first letter of the option is examined. /q by itself still means quiet mode. 97-06-19 bench Added the NOUI property, which caps the UI level for the package at Basic. In other words, if Full or Reduced UI levels are requested, Basic is used. This property can be set in the property table or on the command line. 97-06-19 bench Removed support for the UI property, which didn't make sense as a property anyway. 97-06-19 bench We are no longer dropping the following files to \\united\darwin: TOOLS\Repack (the entire folder) TOOLS\Debug (the entire folder) TOOLS\Ship (the entire folder) TOOLS\rungen.exe TOOLS\install.h TOOLS\launchrc.h TOOLS\install.ico In addition, we are now dropping the Alpha versions of sysdiff.exe and makecab.exe. (The Intel versions were previously being dropped to the Alpha folder). The makecab.exe in the TOOLS folder needs to be released if it isn't already. 97-06-18 malcolmh Fix bug 2006 -- unhelpful error message from msiexec /unreg. Fix service to not accept the STOP message during installations. 97-06-18 bench No longer dropping install*.* to \\united\darwin, as launchers are no longer supported. 97-06-18 bench Added two new methods to MsiServices: ExtractFileName and ValidateFileName. ExtractFileName accepts a "short|long" pair of file names and a flag indicating which name to extract, then returns the extracted name. The extracted name is validated for proper syntax. ValidateFileName validates a file name for either short on long file name syntax. 97-06-18 bench Added the SupportsLFN method the MsiPath. This allows one to call directly on the Path object without first getting its Volume object and calling on that. 97-06-18 bench Path object: The path object no longer handles extracting short or long file names from "short|long" pairs. Specifically, CreatePath no longer takes the fSuppressLFN flag and paths no longer accept file names of the syntax "short|long." As a result of these changes, we correctly handle existing paths with long names even though we may be using the short names from the File and Directory tables. This fixed bugs 1336, 1809 and 1881. 97-06-17 malcolmh Fixed bug 1970, keeping open frequently used reg keys in Installer API 97-06-17 malcolmh Fixed bug 1341. We now copy the product database to the TEMP folder if it resided on a floppy or other removable media. The internal SOURCEDIR property is set to point to the folder containing the database before it moved. The copying of the database is done in Engine::Initialize, just before the database is opened. Deleting the temp copy is done in Engine::Terminate, just after the database is closed. For example, installing from a:\testdb.msi will result in the database being copied to the TEMP folder, the internal DATABASE property being set to C:\TEMP\tmpname.msi, and the internal SOURCEDIR property being set to A:\. *WARNING* --> The SOURCEDIR should not be authored into any database. This will confuse us and lead to incorrect behavior. 97-06-17 malcolmh Fixed bugs 1982, 1987. 97-06-17 malcolmh Fixed bug 1231 -- Conman::RegisterProduct writes empty registry values correctly now 97-06-17 malcolmh Fix bug 1969: CMsiExecute::CopyFile now handles rollback correctly. 97-06-17 malcolmh Removed launcher support from the engine and Installer API. Packages must now be used. This fixes bug 1797. 97-06-17 ivanw Bug 1880. On the browse dialog now we correctly disable the new folder button if the current folder is not writable. Also now we select different default folder names on volumes that support long file names and on those that do not support. 97-06-17 ivanw Bug 1964. Moved and modified the code that sets the initial values for the username and company properties. Before these were set in the RegisterUser action, which is far too late. Now these properties are set in Engine::Initialize. Removed the USERNAME property from the property table. 97-06-17 t-caroln Msidb(d).exe -- fixed bug #1973. When the MsiOpenDatabase API calls the GetDatabaseType function, it would just pass in the database name (which may not always be a full path). So, the CreateFile call would try to open up the access database from the executable's directory. The fix was to prepend the current directory to the database name before calling the externa api to open the database. ----------------------------- Release 0.10.00.3017 ----------------------------- 97-06-17 malcolmh Updated clearreg. The old parameters have been replaced in favor of the following (from clearreg /?): Syntax: clearreg [L|A] Clears reg keys used by Darwin. Specify 'L' for local machine keys and 'A' for advertised keys. If neither is specified then both will be cleared. Local keys cleared: HKLM\Software\Installer HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce HKLM\Software\Microsoft\Windows\CurrentVersion\SharedDLLs (only those values that match keypaths of components in HKLM\Software\Installer\Components are cleared) HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall (only those keys that match product codes in HKLM or HKCR \Software\Installer\Products are cleared) Advertised keys cleared: HKCR\Software\Installer 97-06-16 t-caroln Bug 1960 -- CMsiDatabase::Commit requires creating a separate catalog cursor on the table catalog (since it could be updated). This new cursor does not have write access however, so I had to change it so that it does. The current fix is temporary until the states are completed. However, the current fix enables the continued testing of transforms. 97-06-16 t-caroln Each of these files needs to be released to \TOOLs in the \\united\darrel drop. MsiDbD.exe, MsiDbd.pdb, MsiDbd.map, MsiDb.exe, MsiDb.pdb, MsiDb.map, MsiVald.exe, MsiVald.pdb, MsiVald.map, MsiVal.exe, MsiVal,pdb, MsiVal.map. Also, the smoke test should no longer check for msidbval.exe and msival(d).dll as these files are no longer released. 97-06-16 t-caroln Makefile -- Validation now done with msival(d).exe instead of msidbval.exe. 97-06-16 t-caroln Bug 1894. Since rollbacked, began fixing again. This time with the primary key columns only. So, now the primary key columns use the lower case letter to denote non-nullable columns. These check-ins were also tested with the repackager. 97-06-16 t-caroln Msidb(d).exe -- Bug 1946. Made merge errors fatal during the build process. Note, some merge erros may not be listed in the _MergeErrors table if the errors happen to be due to differences in the table schema definitions. 97-06-16 mattwe MsiGen: Bug #1815 Working on generating the right components for extensions and classes 97-06-15 MattWe Rolled Carolyn's changes of 6-11 to the individual tables back. Broke the repackager terribly, as we populate our rows a few columns at a time. Pushed to Beta 2. 97-06-13 MattWe MsiGen: Bug fixes #1356, #1822, #1878 ----------------------------- Release 0.10.00.3013 ----------------------------- 97-06-11 bench Bug 1905: Changed to Intel property to be defined as the processor level, e.g. 4, 5, 6 ... rather than the processor type, e.g. 486, 586. This was done because the system no longer supports providing the processor type for all processors in the future, where it does provide the processor level. 97-06-11 t-caroln All tables -- bug 1894 fix. Any column that is not nullable must use a lower case letter in the .idt file when defining the column definition. Nullable columns use an upper-case letter. Changed all tables to conform to the standard (that's listed in the help file for the definition of the archive files) and updated the _Validtion table to match the table definitions. 97-06-10 bench Modified the way we set the ROOTDRIVE property, which defines the default location of any install. In Admin mode, we set ROOTDRIVE to the first writable mapped network drive found. In non-admin mode, we set ROOTDRIVE to the fixed writable drive with the most free disk space. Previously, we weren't taking writability into account when setting this property. 97-06-10 t-caroln MsiDb(d).exe -- bug 1902. Fixed so that can run MsiDb(d) -c and then run in interactive mode to create a new database. Previously would create the database but would not allow import of tables. 97-06-10 t-caroln Helpfile -- Added help for building the databases. It's under Development Topics/Building the Databases. 97-06-10 t-caroln Bug fixes 1890, 1891, and 1892. Changed the calls to the obsolete View functions to use the CMsiView::Modify function with the appropriate enum 97-06-10 t-caroln MsiInfo(d).exe -- added it to TOOLS in the release. Do not release externally yet. 97-06-10 t-caroln MsiInfo(d).exe -- Bug 1886. Made it possible to set summary information stream properties by using switches on a command line. See the help file topic Tools/SummaryInfo for more details. This tool also displays the summary information of the database. To display, use MsiInfo(d) {database}. To set summary information properties, use MsiInfo(d) {database} {option}{data}..... If not data is specifiec for an option, that summary information property is removed. This tool uses the external API. 97-06-10 t-caroln MsiDb(d).exe -- Bug 1885. Made it possible in quiet mode to open a database stored in the 'My Documents' folder by changing the command line parsing routine to look for quotation marks and allow spaces. So, can export or import to a database or folder if for example for a database, you would use -d "c:\my documents\testdb.msi". ----------------------------- Release 0.10.00.3010 ----------------------------- 97-06-09 malcolmh Bug 1758 has been fixed. You should see no more error messages that look like "1: 1304 2: 5 3: foo.txt" All error messages should be fully resolved to human-readable text. 97-06-06 ivanw Performed some cleanup in our databases. Removed the files representing empty tables in template, testdb and testcab. Removed duplicate information from the tables. Removed unused binary files, and moved the used ones to the directories where they are actually used. ----------------------------- Release 0.10.00.3006 ----------------------------- 97-06-05 chetanp bumped up database version to 0.19 due to table changes 97-06-05 chetanp shifted BindImage function from IMsiServices to IMsiPath object. changed ProgMan.WkDir to ProgMan.WkDir_. changed Shortcut.WkDir to Shortcut.WkDir_. 97-06-05 t-caroln MsiDb(d).exe -- Exporting from a read-only database can only be done in interactive mode. (left this out in previous note) 97-06-05 t-caroln Bug fix 1850 -- assert in shared.cpp due to usage of now obsolete CMsiView::Insert function. Changed to use CMsiView::Modify with the irmInsert enum. 97-06-05 t-caroln Msidb(d).exe -- Fixed bugs 1846, 1847, 1848. should now be able to round trip with access->msi and msi->access (plus the memory leak when exporting from access which is already documented and a not fix). Should also be able to open a read-only database and export from it. Can also create an access database now (provided the name of the database you give has the .mdb extension). 97-06-05 ivanw Bug fix 1813. Added Order primary key column to the Combobox, Listbox, Listview and Radiobutton tables. Removed the optional Ordering columns from the first three tables and the Value_Next column from the Radiobutton table. Removed the ItemsNext control attribute. 97-06-05 MattWe MsiGen: bug fixes #1745, 1764, 1768, 1811. 97-06-05 t-caroln Msi.Hlp -- bug 1823. Add more information so that the database API's (in msiquery.h) have similar help information as their corresponding methods in the automation help file. 97-06-05 t-caroln Validation -- bug 1801. . and .. and multiple dots not excepted in filename/folder names. Now validate that. Ensures that short filenames/folder names only contain at most one period and that long filenames can contain multiple dots, but at least one other valid character besides a dot. Hence ........ is invalid, but .......s is valid. 97-06-04 Tracyf Costing code for Registry, IniFile, Class, MIME, and Redirection tables has been enabled and debugged (see bug 978). 97-06-04 ivanw Removed support for the old format of the ControlEvent table where the Ordering column is missing. This format change happened last year, so everybody had ample time to update the tables. 97-06-04 ivanw Removed code that supported the old form of RadioButton table with the Help column missing. This format change happened over half a year ago, so hopefully there are no such old tables lying around. 97-06-04 ivanw Bugs 1729, 1747. Modified the Admin wizard sequence in the template database. Removed three obsolete dialogs related to advertising. Added a browse dialog for the install point. The browse dialog is not functional yet, it needs some code in a couple of actions, that will set the path to a reasonable default value. 97-06-03 t-caroln Makefile -- added target for MsiDb.exe and MsiValx.exe. You can build either ship or debug of these. MsiDb(d).exe was formerly apitable.exe and MsiValx(d).exe was formerly apidbval.exe. Had to add the x to msival since the msival.dll creates similar files and wanted to distinguish between the two. 97-06-03 t-caroln Makefile -- fix bug 1566. The problem was msitable was being built debug or ship, but whatever version was clobbered during the make process. Msitable.exe is now built debug only. We now use msidb(d).exe during the make process for building the databases. MsiDb(d).exe was formerly apitable.exe. It is msitable, but it uses the external apis. Since this gets labeled as debug or ship, it is always built correctly. 97-06-03 t-caroln Validation -- fixed bug 1793 for duplicatekey check for new rows. Will now complete the check, as before it was exiting prematurely. ----------------------------- Release 0.10.00.3003 ----------------------------- 97-06-02 t-caroln MsiQuery API -- fix bug 1716 where MsiOpenDatabase could only open idbMsi or idbCreate. Implemented function GetDatabaseType which it calls to determine whether the database is idbMsi, idbAccess, idbODBC, or idbSQLServer. 97-06-02 t-caroln MsiQuery API-- fixed bug 1756 dealing with the MsiRecordGetString API. When calling the FillBuffer function it attempted to dereference a null pointer in some cases. Fixed so that it doesn't attempt to deref a null pointer and releases the string properly. 97-06-02 t-caroln Validation -- fixed bug 1741. Exception caused by SourceDirectory table in a repackaged database. changed so that if it is the sourcedirectory table, it uses the sourceDirectory table's name for the columns that it looks for. Bug also related to attempt to derefernce a null pointer in other section of code. Fixed that as well. 97-06-02 MattWe Repack: Bug #1764: Changed Repackager to read a hex value from the registry for a Typelib LCID. (Was reading it as a decimal, and so the value got corrupted.) 97-05-30 t-caroln ApiTable.exe -- Fixed bugs #1713, 1714. ApiTable.exe is the msitable tool that uses the external api. It works exactly like msitable and also allows the -t option for applying transforms (similar to the -m option for merging databases). The -t option is only permitted in command line mode. Currently ApiTable.exe only works on creating new databases or opening msi databases due to a bug in MsiOpenDatabase which doesn't check the type and assumes msi. 97-05-30 t-caroln ApiDbVal -- fixed bug #1712. Now the error strings can be localized as they are now resources in a string table instead of hard coded in the .cpp file. 97-05-30 t-caroln Msiquery.cpp -- Fixed bugs #1696 and #1697 where services was being leaked. Now there is no longer a memory leak when using the MsiDatabaseGenerateTransform and MsiDatabaseApplyTransform APIs. 97-05-30 t-caroln Makefile -- added target apitable to build apitable.exe. It uses the tools' makefile. 97-05-30 bench Added the file animate.avi to the TOOLS folder in the drop. This file needs to be released. 97-05-30 ivanw (bug 1331) Added a Cancel button to the basic UI. Changed the functions in the engine that interact with the basic UI so they take notice when the button is pressed. Just as with the regular UI, after hitting the Cancel we are at the mercy of the running action. If it is considerate, it will stop in the middle. If the action ignores the cancel message the action can finish its business but the Sequence will prevent any further actions from starting. For this reason it is important that all actions check the return value when they call Message! 97-05-30 malcolmh Resolved bugs 1590,1695,1690,1685,1694. Most code in Darwin no longer requires the DLLs to be registered. Only the server needs to be registered (msiexec /regserver). We should no longer be using CoCreateInstance to obtain objects from the kernel. Rather, we should load the class factory directly from the DLL and use it. ----------------------------- Release 0.10.00.2930 ----------------------------- 97-05-29 bench Fixed bugs 1656, 1663, 1664, 1672 and 1674, all related to the path object incorrectly handling errors when reading from a file that is held by another process with exclusive access (i.e. no sharing whatsoever). These fixes in the path object will allow costing and file copy/removal to handle these cases appropriately (thereby fixing bugs 1488 and 1489). 97-05-29 mattwe MsiGen: (bug #1608) Abandoned creating ICO files for shortcut targets, and now starting to use EXEs. Right now, they all use advt.exe, located in src\tools\repack\support. Further work being done to use the individual icons used up from the target apps. 97-05-29 malcolmh Resolved bugs 1496, 1511, 1548, 1562, 1572, 1578, 1579, 1589, 1592, 1595, 1597, 1598, 1626, 1631, 1637, 1639, 1659. The API's basic UI now uses the same basic UI that the engine uses. This mainly affects MsiProcessAdvertiseScript, which previously only displayed messageboxes. 97-05-28 t-caroln apidbval is now a target in the makefile to build apidbval.exe which is the database validation tool that uses the external api and the validation code in services. Fixed bug #1644 so that apidbval reports the errors that are reported by msidbval. Apidbval will eventually replace msidbval, but for now both executables and both the core and msival(*).dll validation code will be maintained. 97-05-28 johndelo MsiInfo.exe is now built by the makefile (not delivered yet). It is a replacement for suminfo.exe that uses the external MSI API, and will eventually allow setting of summary information property values. 97-05-27 bench Fixed bugs 1576 and 1624, dealing with Admin installs. To fix 1576, we always set properties for folders in the directory table, whereas before we didn't set these properties during an admin install. Code existed that depended on those properties being set even in admin mode. 1624 was fixed by updating the AdminInstallFinalize action. This action now copies only the database to the admin image, even if a launcher is used. An error occurs if an admin install is attempted with a launcher containing the database in a resource, so don't do it. 97-05-27 johndelo The following are no longer built as part of the standard build and release: msinst.h msinst.lib, msieng*.dll msisrv*.dll. The DLLs can still be build using the target names: engine and services. This support will eventually be dropped. The makefile is now using precompiled headers for much faster builds. This requires that common.h comes before any defines, definitions, or other includes in the source files. 97-05-27 t-caroln Implemented apidbval.exe. Currently the way to build it is to run nmake -f apidbval.cpp from the %Darwin%\src\tools directory. This executable validates a msi database. It uses the external apis instead of the validation dll. ----------------------------- Release 0.10.00.2922 ----------------------------- 97-05-22 bench Now dropping msierror.msg to \\united\darwin in the SHIP, SHIPSYM, DEBUG and LEGO folders. These files need to be released. 97-05-22 Mattwe MsiGen: Gave names to anonymous persistent columns. (necessitated by midnight changes in database.cpp.) ----------------------------- Release 0.10.00.2922 ----------------------------- 97-05-21 bench Removed the ixoFileMove operation, as identical functionality exists in ixoFileCopy using the icmRemoveSource install mode bit. 97-05-21 malcolmh Made change to the API to fall back to using the InProgress key if we can't find source information in the standard location. I.E. if we're given a product code but the product's not yet advertised we'll look in the inprogress key to see whether the key matches the in progress key. If it does then we use the database listed under the in-progress key. This makes suspend, resume, and reboot functional. 97-05-21 johndelo MsiDatabase.Persist(idpEnum) and the C API MsiDatabasePersist(enum) are now OBSOLETE, replaced by MsiDatabase.Commit() and MsiDatabaseCommit(), with no arguments. Rollback of uncommitted persistent data is implicitly performed when the database is closed. Commit may be called multiple times. The old functions will be supported (commit only) for a couple releases. 97-05-21 Mattwe MsiGen: added 16 bit contexts to class table. Also bug fixes. 97-05-21 johndelo MsiDatabase.GetPrimaryKeys(szTable) is now implemented for all databases and is supported in the C API as MsiDatabaseGetPrimaryKeys, which returns a record corresponding to the primary key columns. 97-05-21 Mattwe Validation: changed MIME primary key from identifier to text. "foo/bar" is the typical MIME entry, but that doesn't fit for identifiers. 97-05-21 bench Added the UpdateStared property, which is set when we are in resume mode, or in InstallValidate. When this property is set, it means that we have updated the system in some way and there is something to rollback. In testdb, this property determines whether we ask the user to rollback in the final dialogs. 97-05-21 malcolmh Added a field to ixProductInfo record and changed one. See helpfile for the new list of fields. 97-05-21 malcolmh Command-line options to msiexec no longer need to be specified in a particular order. ----------------------------- Release 0.10.00.2921 ----------------------------- 97-05-21 Tracyf As part of fixing bug 1544, the RunFromSource column of the Feature table has been changed to be non-nullable (a value is now required in this field). 97-05-21 bench Fixed ResolveFolderProperty again. This time, if we can't find the path of the database, as is the case when the database is located in the launcher, we use the path of the launcher. 97-05-21 malcolmh Clearreg now also clears any SharedDLL entries in HKLM\Software\Microsoft\Windows\CurrentVersion\SharedDLLs that match components in HKLM\Software\Installer\Components. ----------------------------- Release 0.10.00.2921 ----------------------------- 97-05-21 johndelo MsiDatabase.Persist(idpCommit) will leave the database in a writable state, as opposed to the previous behavior where it put the database into a read-only state. Commit may be called multiple times. Explicit Rollback is no longer supported (there was no way to implement it without potential corruption of the database). However, as today, Rollback is implicitly called when the database object is destructed, which will rollback updates back to the last Commit. MsiDatabase.GetUpdateState will no longer return idsCommit or idsRollback. 97-05-21 johndelo MsiCursor: The iraReadOnly row attribute is removed, and the iraUserInfo attribute is non-persistent. There are no persistent row attributes--too risky to change the file format. 97-05-21 johndelo With a database opened read-only (like a normal install), no persistent updates are allowed, i.e. no Insert into persistent tables, and Update of temporary columns only. There is a new function MsiCursor:InsertTemporary, which will insert a temporary row into a persistent table. MsiView.Modify has a corresponding option, ivmTemporary. Of course, an Insert can always be be performed on a temporary table. Update of persistent data in a read-only database was accidentally supported, and some code may have taken advantage of it, but it causes database corruption as the updated string pool cannot be kept in sync with the persistent data on persistent file. In the engine, SetProperty/GetProperty works on a private temporary table maintained by the engine, that is initially populated with the Property table data. This was also required to prevent the authoring environment from putting working property settings, like platform properties, into the ship Property table. Cursors obtained for the database catalog tables are not updatable, even for temporary columns and rows in order to preserve database integrity, however the UserInfo row attribute may be set. 97-05-21 chetanp Added optional CompLocator table for Appsearch Added optional Cost column to TypeLib table 97-05-21 Tracyf Support for decompressing files from a cabinet stored as a stream in an .MSI database is now implemented. The MsiAlter tool can be used to cram a cabinet file into the database. In the Media table, the "Cabinet" column should contain the name of the stream containing the cabinet, preceded by a pound sign ("#"). 97-05-21 Tracyf The IMsiServices.CreateCopier function now takes a new argument (required to enable support for reading from a cabinet stored in a stream). 97-05-21 Tracyf Fixed a bug in InstallFiles, involving split files. Before the fix, if the last file in the File table to actually be copied is split across two or more disks, the second half of the file (or the last two-thirds, or whatever) would never be decompressed, because the required final ixoChangeMedia operation(s) were not being put into the script. 97-05-21 Tracyf The InstallFiles action (in concert with the ixoFileCopy and ixoChangeMedia operations) has been upgraded so that it will no longer prompt for disks that don't contain files that actually need to be copied. For instance, suppose a user installs a product that uses 30 floppy disks, and suspends the install after copying from the first 20 disks. Without this fix, when the user resumes the install later, InstallFiles would prompt the user for every one of the first 20 disks again, even though we most likely don't need to copy any files from any of them. 97-05-21 Tracyf All file copy/move actions now take into account the backup files created for rollback when determining disk cost. 97-05-21 Tracyf Costing for the WriteIniFile action has been implemented. 97-05-21 Tracyf Costing for shortcuts has been implemented. Because ofthe overloaded nature of the "Target" column in the Shortcut table, the coding and testing requirements for determining shortcut costs are rather extensive. More thorough documentation for shortcuts and shortcut costing will be forthcoming as soon as possible. 97-05-20 bench Fixed the Engine.ResolveFolderProperty method to resolve relative to the folder containing the database rather than the launcher. As such, SOURCEDIR, if it isn't set, is set to the folder containing the database. 97-05-20 ivanw Implemented preview for dialogs and billboards. Added the Preview dialog attribute. Added the BillboardName control attribute. Modified several control types, so they don't touch their properties in preview mode. 97-05-20 t-caroln MsiQuery API -- updated MsiViewModify to use the validation enums. Also implemented MsiViewGetError for obtaining errors from validation. The MsiViewGetError API excepts a buffer, and buffer size to put the column name and returns a MSIDBERROR enum depending on the error/no error. 97-05-20 t-caroln CMsiView -- Added GetError method for obtaining Validation errors. Returns the enum value and the name of the string. In the automation layer, it returns a BSTR with the following syntax - ColumnName, Error. 97-05-20 t-caroln Implemented validation part of the view object. It's in the Modify method and there are three new enums -- irmValidate (for fetched record), irmValidateNew (for new record) and irmValidateField (for field validation of fetched or new) 97-05-20 malcolmh Add a "/O" option to msiexec to allow a property=value string to be specified when doing an install. If there are spaces in this string it must be placed withing quotation marks. 97-05-20 Mattwe MsiGen: Fixed minor bugs, and one access violation caused by adding doing a MsiString foo("blah"); foo+= 'x'; Fixed by doing foo += MsiChar('x'); Oddly, the code has worked fine for a week's worth of releases... ----------------------------- Release 0.10.00.2920 ----------------------------- 97-05-20 bench Added the Resume and Preselected properties. The Resume property is set when we are resuming a suspended install. The Preselected property is set when any of the feature/component/file selection properties (ADDLOCAL, ADDSOURCE, etc...) are set. These properties are used to supress certain dialogs in the wizard sequence as appropriate. 97-05-20 bench Resume mode: Upon error or user cancellation, we now allow the option of rolling back or suspending the install. The same mechanism is used to recover from a crash or a pulled plug. Upon resuming a suspended install, the same selections made originally by the user are used again, and the UI to change selections is supressed. 97-05-20 bench ConfigMgr/Server: Added three methods to facilitate suspend/resume. The ConMan.InstallInitialize method is called to mark an install as in progress, and lock out the server to other installs belonging to different products. This method creates the HKLM\...\Installer\InProgress key, which contains information necessary to resume the install at a later time. While this key is set, no other installs may run. This means both calls to InstallInitialize and RunScript will fail for installs for products other than the product marked as in-progress. The ConMan.InstallFinalize method is used to mark an install as complete, and handle the rollback if need be. If an install is suspended, the InProgress key is not removed. When the install is resumed, the information necessary to carry on is obtained through the ConMan.GetInProgressInstallInfo method. Currently, GetInProgressInstallInfo is called in Engine.Initialize. InstallInitialize is called in the InstallValidate action. InstallFinalize is called in Engine.Terminate. Complete documentation for all of these methods is forthcoming. 97-05-20 malcolmh Added Repair, Install to Network, and Uninstall verbs. Removed Advertise verb. 97-05-19 ivanw The main wizard sequence in Template now has 6 versions depending on the Installed, Resume and Preselected properties. 97-05-19 Mattwe MsiUtil: Added CreateStreamFromFile (with automation.) Takes a file name, and a stream name, and copies the file into the current database's main storage. 97-05-19 Mattwe RunGen: Added support for creating launchers or msi packages. (radio button) 97-05-19 Mattwe Release: Diamond.exe is no longer released. MakeCab.EXE is dropped instead, to the same place. 97-05-19 t-caroln MAKEFILE -- added testcabdb target for building a database that uses cabinet files. The database is built using the merge, but it's files reside in the %DARWN%\data\testdb.cab directory. It also uses msialter to add the msproj1.cab file as a stream in the database storage. 97-05-19 t-caroln msialter.exe -- Cabinet implementation. No more property file. To add a cabinet, use msialter {database} {cabinet}. The cabinet will be stored as its base name., i.e. msproj1.cab if the cabinet was c:\darwin\data\project\msiproj1.cab 97-05-19 Mattwe DoAcme1: Added the repackUI build. 97-05-19 Mattwe Repack: RPKWIZ.EXE should be released in the \Tools directory. This is a-billhu's repackaging wizard UI. Also, the repackUI build option will build the repack template DB, and the rest of Darwin if needel. On a clean build machine, repackui should build everything you need. 97-05-19 Mattwe MsiGen: (apparently this didn't get added last week.) Added Icon table population for shortcuts and classes. MsiGen should now be code complete. 97-05-19 Mattwe Repack: added makefile for a-billhu's repackaging wizard UI. Updated main Darwin makefile with "repackui" option, which will also rebuild gen and util if necessary. Made minor code changes to get the UI to compile with OTOOLs. 97-05-19 t-caroln Added validation code to cursor implementation. Now part of Cursor.Validate, however msidbval.exe still uses the validation dll. Will be converted to use external api once finalize how to expose the cursor through the modify method of the view object and the MsiViewModify API. 97-05-19 t-caroln msialter.exe -- since doing away with launcher, update of launcher resources now requires the -l option. So, to update launcher resources, use msialter -l {launcher} {propfile}. Update msialter to now permit stuffing cabinet files into a database. Use msialter {database} {propfile}. In propfile, use CABINET={cabinet file} syntax. The cabinet will be stored in the database storage as it's base name. So, for the c:\temp\msproj1.cab file, it will be seen in the database as msproj1.cab. 97-05-19 ivanw Added Rollback/Resume choice to UserExit and FatalError dialogs. 97-05-19 ivanw Handler::DoAction with an argument of "!" sets the Preview mode. In preview mode putting up a new dialog or calling DoAction with "" removes the existing dialogs. 97-05-18 ivanw Modified Clearred to remove the HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce tree. To do this, use the ALL option. 97-05-18 malcolmh As far as I am aware, *all* problems with server unregistration have been fixed. The server should only refuse to die within 6 minutes of a client crashing. Please let me know if you find otherwise. 97-05-18 malcolmh Darwin shell data (associations and verbs) is now unregistered when the server is unregistered. 97-05-18 malcolmh Checked in CLEARREG to allow clearing of HKCR\Software\Installer and HKCU\Software\Installer. This will be updated to delete our new regkeys when we start using them. ----------------------------- Release 0.10.00.2916 ----------------------------- 97-05-16 johndelo The system error codes returned from the public APIs, as defined in msi.h and misquery.h have been cleaned up and extended. Some of the messages supplied for the error codes were inappropriate for our use. The new message fragment, MsiError.mc, needs to be merged into NT5 winerror.mc. 97-05-16 johndelo The engine initialization error messages have been removed from the launcher. Since the MSI errors are now being integrated into the OS, the messages for those error are available via the system API: FormatMessage. The engine now uses this instead of looking up strings in the launcher. For use with systems without the latest NT5 builds, a message file is now built, MsiError.msg, which is installed along with the other MSI components. Messages will be obtained from that if not found in the system. (This message DLL will not be needed as part of NT5). 97-05-15 malcolmh The MsiAdvertiseProduct API now has two additional parameters to specify transforms and language. 97-05-15 malcolmh The MsiInstallProductAPI now takes a package path instead of a module handle. This package path may be a path to either a database or a launcher. 97-05-15 malcolmh We now register associations to allow installation by double-clicking on an MSI database. Also, the Install and Advertise verb are available by right-clicking on an MSI database. The registered verbs use msiexec(d) to do their jobs. These associations and verbs are registered when /regserver is run of msiexec(d), or they can be registered independently of registering the server by using msiexec(d)'s /D option. These associations are registered under HCKR\.msi and HKCR\Msi.Package 97-05-15 malcolmh Msiexec supports some new command-line options: /P installs a product given its database. /D registers the .MSI shell association and verbs /A advertises a product given its database. /Q suppresses all UI -- this option must be specified first 97-05-15 malcolmh Msiexec now returns and displays standard system messages. 97-05-15 malcolmh Added two APIs for future source list management: MsiModifySourceList and MsiEnumSourceList. These are not yet implemented but are in msi.w/msi.h 97-05-15 Mattwe MsiGen: added pulling up of Icons. Verrry complicated. Can write back out to ICO files, or to memory suitable for putting into an allocated stream. 97-05-15 ivanw Removed the Explorer Engine mode bit and added the Reboot and RebootNow bits. Added the ForceReboot and ScheduleReboot actions. Added a Reboot method to the Server. Added the REBOOT property. Added code to the Engine, so if an action returns Suspend, it means that a reboot is needed. Added the new actions to the Testdb. These can be turned on by setting the FORCEREBOOT or SCHEDULEREBOOT properties. 97-05-14 bench Shell folder properties: When setting shell folder properties, if the SHGetSpecialFolderLocation API fails (which may be because the folder doesn't exist), we check the registry for the path. The result of this is that we set the properties for folders that are registered but don't exist, where we didn't before. 97-05-14 t-caroln Makefile -- testdb.mdb now built by exporting the testdb.msi tables to a temporary directory and then importing into an access database. The temp directory is cleaned up before and after. 97-05-13 bench Added db2db.bat to drop in Tools folder. db2db is a tools to convert between .msi and .mdb databases. This file needs to be released. ----------------------------- Release 0.10.00.2913 ----------------------------- 97-05-12 johndelo The public APIs for access by custom actions and tools have now been defined and implemented. The source to the header file is MsiQuery.w, but the actual header is built and delivered as MsiQuery.h. Both Ansi and Unicode versions of all functions are implemented with the exception of the UI Dialog preview functions. Although help for these API functions is not available yet, they are essentially the same as the corresponding automation functions, with the objects replaced by corresponding handles. There are extensive comments in the header file, which when used with the automation help topics, should permit testing to proceed. The launcher and tools are in the process of being converted to use these API functions, rather than be dependent upon the internal header files. 97-05-12 johndelo Future alert: Error returns for the external installer API functions will be modified slightly, as some of the seemingly appropriate error macros had quite misleading explanations. 97-05-12 t-caroln added TOOLS\schema.msi to the drop. This file needs to be released. 97-05-07 t-caroln Makefile -- Building of databases using -m option of mistable. Schema.msi is the base. Template.msi inherits from schema.msi. Testdb.msi inherits from template.msi. Repack.msi inherits from template.msi. Template.msi contains the basic UI and sequence actions. Whatever UI is common to template and testdb lies in template's directory. This will prevent having to maintain duplicate copies of files. After building, one needs to check that the _MergeErrors table was not created. This table means that there were merge conflicts encountered during the building of the database and they should be investigated. 97-05-07 t-caroln Added a new directory/database -- schema.msi. This database contains all of the tables to illustrate the schema. The only non-empty table is the _Validation table. It can be built separately using the schemadb target. This database forms part of the new inheritance process for building the databases. ----------------------------- Release 0.10.00.2907 ----------------------------- 97-05-06 ivanw The validation of the path on a Browse dialog has been moved from the individual controls to controlevents. As part of this change the DoNotCallManager and the ExistingOnly control style bits have been eliminated and the SetPath, CheckPath and CheckExistingPath controlevents have been added. 97-05-06 ivanw Rolled back the last two changes to makefile. testdb is built in the old way again. We had to do this because make was building a corrupt testdb. 97-05-06 t-caroln MergeDatabase method -- the optional table parameter can have other columns in it, but those other columns must be nullabe as if merge conflicts are encountered, updating the table will fail with non-nullable columns. 97-05-06 t-caroln Makefile/ testdb -- Testdb is now built from %darwin%\data\testdb.tmp whose idt files are additions to those in the %darwin%\data\template directory. The template database is built first and then merged with testdb. After this build, the testdb tables will be migrated from the temp directory to the testdb directory. Also the repackage database will be built using the merge process. This will prevent having to keep duplicate files in ssync, except if major table schema changes occur. 97-05-06 t-caroln Msitable -- added -m option for merging a database. Can have up to 10 -m's. The -m option can only be used in non-UI mode. See help file for details. 97-05-06 bench Added the Samples folder to the drop. The first sample install is Testdb, which is contained in the TestDb folder beneath Samples. Testdb.msi has been moved from Tools to Samples\Testdb. 97-05-06 mattwe Repack: Added Typelib population, and finished preliminary pass of Verbs and Extensions. There a number of spec/design issues that have been brought up with Extensions, that Chetan should be solving soon... 97-05-06 tracyf The following properties are now supported: COMPADDLOCAL, COMPADDSOURCE, FILEADDLOCAL, FILEADDSOURCE. The main result of this is that the MsiInstallMissingComponent and MsiInstallMissingFile APIs are now functional (since they work by setting one of the aforementioned properties and then calling DoAction("Install")). See the help file for more info. 97-05-05 tracyf A new Reinstall mode is now supported: iefOverwriteEqualVersions. The letters assigned to the various reinstall modes have also been rearranged a bit, and the descriptions have been updated, to make their meanings a bit more clear. See the REINSTALLMODE topic in the help file for more info. 97-05-05 tracyf Under NT, the engine Message function now writes an entry to the system Event Log if an error or warning is reported. To avoid major complications, only the error code is written (i.e. no description text is available if you double-click the event in the Event Viewer. The "Source" name for events generated by Darwin is "Installer". 97-05-05 bench Added the icmRemoveSource bit to the possible install mode flags passed to IxoFileCopy. This allows IxoFileCopy to essentially move files rather than copying them. This functionality replaces the IxoFileMove operation, which will be removed when it is no longer used in the MoveFiles action. 97-05-03 t-caroln Validation: RegPath category does not allow [$abc] and [#abc] properties. KeyFormatted allows multiple [#abc] and [$abc] properties embedded within a string. For any column where they are not allowed to be embedded or multiples are not allowed, special validation will be needed or a special category will be needed. 97-05-03 t-caroln _Validation table: Changed Verb.Argument, Shortcut.Arguments, RegLocator/RemoveRegistry/Registry.Name and Registry.Value to use the KeyFormatted category string. 97-05-03 ivanw Added one more parameter to Handler::Initialize. This is the window handle of the main window of the calling process. (can be null) This way when Darwin is called from an application our windows will be properly parented to the calling app. 97-05-02 t-caroln Msialter.Exe -- Implemented update icon part so that one can change the icon in the launcher by using the following syntax in the property file : ICON=@{filename.ico} where {filename.ico} is your .ico file. ----------------------------- Release 0.10.00.2902 ----------------------------- 97-05-02 ivanw Added the JPEG code to the handler. Two new dialog attributes are introducedL Palette and UseCustomPalette. A new dialog style is defined: UseCustomPalette. Added five new dialog to testdb to display the JPEG features. Set TESTDB and from the first dialog you can access the JPEGs. Check them out, they look cool! ----------------------------- Release 0.10.00.2902 ----------------------------- 97-05-01 chetanp Changed PublishComponent.Index column name to PublishComponentQualifier to match the corresponding MSI API function. Will affect the PublishComponents and UnpublishComponents action 97-05-01 malcolmh In Install API: Removed INSTALLUI_HANDLER from all APIs. Use MsiSetInternalUI and MsiSetExternalUI instead. 97-05-01 malcolmh In Install API: Removed obsolete functions: MsiQueryProductInfo, MsiLocateLanguageComponent, MsiIsProductLauncher. 97-05-01 malcolmh In Install API: Changed all APIs that take handles to use MSIHANDLE type. 97-05-01 malcolmh In Install API: Moved MsiCloseAllHandles and MsiCloseHandle to msi.w from msiquery.w 97-05-01 malcolmh In Install API: Added INSTALLSTATE_INCOMPLETE identify the state when a component/product is only partly installed because it needs to be resumed or is in progress. 97-05-01 malcolmh In Install API: Changed REINSTALLMODE to be a bitflag. All APIs that take a REINSTALLMODE to a DWORD. 97-05-01 malcolmh In Install API: Added MsiSetInternalUI, MsiSetExternalUI, MsiSetLogMode, MsiQueryProductState, MsiOpenPackage, MsiEnumComponentQualifiers. 97-05-01 malcolmh In Install API: Renamed MsiProvideComponentIndirect to MsiProvideQualifiedComponent. 97-05-01 malcolmh In Install APIRemoved fRunWizard parameter from MsiAdvertiseProduct. 97-05-01 chetanp Added IMsiView::Modify function. see help for more info 97-05-01 t-caroln Validation DLL now will allow the DefaultDir column of the Directory table to contain environment variables. In validation, this means that for the roots, a %identifier is valid as well as an identifer. For non-roots, the column is validated as a filename/folder name column. 97-05-01 t-caroln Msialter.exe now correctly dumps an Icon resource to a .ico file when using the -f option. 97-05-01 malcolmh Modified MSIEXEC. Long filenames are now supported. Additionally, dashes and slashes are now valid characters in arguments, as long as their not the leading character. That is, "msiexecd /Z 1-2-3" will be interpreted as one switch (Z) with an argument (1-2-3), but "msiexecd /Z -2-3" will be treated as three switched (Z, 2, and 3). Msiexec no longer supports feature installation. Beyond its registration and debugging/testing features, the only supported options are /X for remove-all and /C for configure product (i.e. go into maintenance mode). Remove-all will be used by SMS and Configure-product will be used by the Add/Remove control panel. Use MSIEXEC(d) /? for a list of valid options. 97-05-01 bench The text displayed in the UI during rollback and rollback cleanup is now passed to the server in the script, which is retrieved from the ActionText table of the database. The two "actions" are Rollback and RollbackCleanup. The new ixoRollbackInfo operation is used to pass this information in the script. Updated the ActionText table in testdb to reflect this. 97-05-01 t-caroln Fixed in the Validation DLL the validation of a Registry Path. Registry paths can allow any character, so had to change validation to allow that. 97-05-01 t-caroln Changed two entries in the _Validation table. The IniFile.Value columns and the RemoveIniFile.Value columns are now validated as Formatted instead of Idenitifer. Also update the template database with these changes. 97-05-01 bench Added TOOLS\template.msi to the drop. This file needs to be released. 97-05-01 mattwe Makefile: added templatedb and repackdb options to build. Builds the template.msi, and the repack wizard template database (repack.msi). No sentinel file for these yet, will add if needed. 97-05-01 mattwe Util: fixed update/assigns 97-05-01 mattwe Repack: updated repkinst.bat to use repack.msi from build. 97-05-01 mattwe MsiGen: Added RemoveIniFile population. Added RewriteString() to escape special characters that are special to FormatText. Fixed bugs related to Update/Insert fixes in database. 97-05-01 mattwe Repack: Added IDTs for the SourceFile and SourceDirectory tables to src/tools/repack/support. These are imported into the new template DB to form the repack.msi template for the Repackaging Wizard. Still needs validation tables. 97-05-01 mattwe Template: created darwin\data\template with a template DB based on testdb. It should be a minimum DB for starting new authoring, or a baseline for autormated authoring tools (Repackaging Wizard.) All new schema changes need to be added here as well as in testdb. 97-04-30 johndelo MsiView.Update and MsiCursor.Update are now more strict: Only fetched rows can be updated, and primary key data cannot be changed (was leaving orphaned records and tromping on duplicate keys and killing joins). Coming soon is a new function, Replace, which will delete the exising row and insert a new one as necessary. Update is the only function that will allow updating through a join. Old code that dependent upon Update to incdiscriminantly insert new data should probably call Assign instead. More doc is forthcoming. 97-04-30 chetanp the CustomAction table format has changed. Please see help 97-04-30 bench Changed the name of the DOC\msierror.h file to msierror.mc to correspond to NT's winerror.mc. Also changed the format of this file to match winerror.mc. This change needs to be reflected in the release. 97-04-30 ivanw Made some changes to the Browse dialog to coincide with the bump in the database version. The PathTailEdit control type has been renamed to PathEdit to be more truthfull. Added two new control styles: SplitPath and ExistingOnly. To get the same functionality as before, one must add the SplitPath bit to the PathEdit, DirectoryCombo and DirectoryList controls on the browse dialog. These two bits are not fully implemented yet, but to keep your browse dialogs running you have to add the SplitPath bit now. Testdb has been modified to reflect these changes. 97-04-30 chetanp Changed the RedirectComponent table to eliminate the Language column. Changed the PublishComponent table to change the Language column to the Index column. See help on these tables for more info. 97-04-30 bench Completed rollback for the RegisterFonts and UnregisterFonts actions. All that remains are the Register/UnregisterTypeLib actions. 97-04-30 bench Made a few changes to font registration. The C interface to MsiServices.RegisterFont now accepts an IMsiPath* rather than an IMsiPath&. If the pointer is null, the file is assumed to be located in the default system font folder. The automation interface has been changed to accept either an empty argument or no argument for the path, with either indicating the file is in the font folder. Finally, if the path passed to RegisterFont is either empty or is equivalent to the system font folder, we only register the font file name, rather than the full path of the font file. 97-04-29 tracyf The ReserveCost table is now available. This is an optional table that allows authors to reserve extra disk cost in any specified directory, attributed to a component. See the help file for details. Note that I've added this table to the TestDB, and authored it to reserve some extra cost under the "Month_Mar" and "Tools" components. 97-04-29 bench Made a few changes to rollback reg keys and backup file locations, in accordance with the Rollback spec. The reg value to enable or disable rollback is now "Enable" under HKLM\Software\Installer\Rollback. (It used to be "Mode") Note that the interpretation of this value is scheduled to change, but hasn't yet. Rollback scripts are now registered under the key HKLM\Software\Installer\Rollback\Scripts. Rollback scripts are by default created in the Config.Msi folder at the root of the volume containing the Windows folder. Backup files are now created in the Config.Msi folder at the root of whatever volume the original file was located on. Finally, the location for backup files and rollback scripts can be configured by setting the "BackupPath" value under HKLM\Software\Installer\Rollback. 97-04-29 t-caroln MSIDBVAL -- fix for parsing properties to allow for [\[] and [\}] types; fix to allow for multiple error report; fix for CustomSource category used by the Custom Action table. ----------------------------- Release 0.10.00.2829 ----------------------------- 97-04-28 johndelo Custom action support is implemented. See help for details. EXE and DLL custom actions are supported, script files are not supported yet. Custom actions are called by putting the custom action name in the sequence table, usually with a conditional expression. The custom action info is in the CustomAction table, and the code can be in the database or a separate file. TestDb.Msi has examples of custom actions (must define property: TESTACTION in order to enable the custom actions). 97-04-28 ivanw To simplify support for different scripts we eliminated the support for multiple fonts within the same string. We can still use the same syntax to define a text style for a given string or a default one for the control, but the style label can appear only at the beinning of the string. Changed testdb accoringly. Old databases that have style specification in the middle of the string won't brake, but the style labels will show up as part of the string. 97-04-28 tracyf The RemoveFiles action has been modified slightly - it now attempts its file removal action if the gating component is set to any action state (iisLocal, iisSource, or iisAbsent). Before, it attempted removal only for the iisLocal or iisSource states. This was changed because testing identified a real-world scenario in which enabling removal during the iisAbsent action state would solve an Office authoring problem. 97-04-28 tracyf When using properties on the command line to configure features (i.e. ADDLOCAL, ADDSOURCE, REMOVE, OR REINSTALL), the Selection Manager now properly sets only the specified feature(s) for action - all other features, including children of the specified feature(s), are set to the NULL (no action) state. As a side effect of this, the ProcessPropertyFeatureRequests method had to be removed from the public IMsiSelectionManager interface (also from automation). 97-04-28 bench Added the file repkinst.bat to the \\united\darwin drop in Tools. This file installs the repackaging wizard to the local machine. This file needs to be released. 97-04-28 mattwe Repack: created repackaging wizard reference machine installer. darwin\src\tools\repack\repkinst.bat. Should be run on reference machine. Copies files down, and registers darwin. 97-04-28 t-caroln Msialter.exe -- The tool now limits one to only one database file resource per launcher. By design, all file resources are neutral. Also, the database property is always neutral. Only one database property can be listed in a property file. Will be changing the install.rc file so that the Database property is made neutral. 97-04-28 johndelo MsiEngine.EvaluateCondition now takes a variety of symbols besides property names: enviroment vairables (% prefix), component installed state(? prefix), component action state($ prefix), feature installed state(! prefix), feature action state(& prefix). More info in help. 97-04-28 johndelo MsiEngine.Property, IMsiEngine::Get/SetProperty now accepts environment variables if prefixed by a percent sign (%). The envir.variable code was consolidated here from other places (FormatText, EvaluateCondition) to provide a more general behavior. Environment variable get/set is only for the current process. 97-04-25 tracyf The SetFeature member has been removed from IMsiSelectionManager, since the existing ConfigureFeature member already provides identical functionality. Also, ConfigureFeature has been modified to use the same iisEnum constants as other SelectionManager functions. 97-04-25 t-caroln Added checkdb as target for make win debug. This target creates a sentinel file -- checkdb.snt if testdb.msi is a valid database. Else, it outputs errors in testdb.msi to standard out. Beware!! 97-04-25 t-caroln Added two new categories for _Validation --> Property and CustomSource. The CustomSource category will be used by the CustomAction table Source column. This will occur when the CustomAction table data is checked in. The Property category is for Property strings that are valid identifiers but can represent an environment variable, so a percent sign is allowed. ----------------------------- Release 0.10.00.2825 ----------------------------- 97-04-24 johndelo InstMsi.exe (and the debug version InstMsiD.exe now install the combined Msi kernel DLL, Msi(D).dll, instead of MsiEng.dll+MsiSrv.dll. It will not remove or unregister to old dlls (as it knows nothing about them). RegMsi.exe now registeres/unregisters the combined DLL if no modules are specified, but can still act on the old DLLs with the options S and E. 97-04-24 tracyf Fixed a problem involving cabinet files in which more than one file is split from one disk to the next. As a side-effect of the fix, it turns out that we no longer need the 'split' bit set for any files in the File table (I guess you could say that Darwin's "intelligence" has grown such that it no longer needs to be told which files are split. Yippee!). If that bit is set, it will now just be passively ignored, and I'll eventually remove reference to it from the docs. 97-04-24 bench Added the Repackaging Wizard files not already dropped to the \\united\darwin drop. Each of these files needs to be released: TOOLS\version.h TOOLS\msidefs.h TOOLS\install.h TOOLS\launchrc.h TOOLS\install.ico TOOLS\SHIP\install.obj TOOLS\DEBUG\install.obj TOOLS\rungen.exe TOOLS\repack.msi TOOLS\REPACK\cvtres.err TOOLS\REPACK\cvtres.exe TOOLS\REPACK\gdi32.lib TOOLS\REPACK\kernel32.lib TOOLS\REPACK\launchrc.h TOOLS\REPACK\libc.lib TOOLS\REPACK\link.exe TOOLS\REPACK\lz32.lib TOOLS\REPACK\ole32.lib TOOLS\REPACK\rc.exe TOOLS\REPACK\rcdll.dll TOOLS\REPACK\user32.lib TOOLS\REPACK\winver.h TOOLS\REPACK\msipdb41.dll TOOLS\REPACK\diamond.exe TOOLS\REPACK\vb40032.dll 97-04-24 mattwe MsiGen: bug fixes (will include bug #'s in future,) did a bunch of code cleanup in GenerateTables (some very wobbly conditionals from original code,) and typelib feature work. 97-04-24 mattwe repack: added command line support to src\tools\repack\support\tempdb.exe, so it can be used from within the build process. 97-04-24 bench We now build and drop the ship versions of the tools msiutil, msipat, msigen, msival and msiloc. The .dll, .map and .pdb files need to be added to the release, under the tools folder. 97-04-24 mattwe Addfiled MakeCab.exe to src\tools. Diamond is not redistributable (internal technology only because of the Quantum compression.) MakeCab is safe to release with the repackager. 97-04-23 bench We now use the default UI to handle rollback or rollback cleanup after an install. Previously, there was no notification that such things were going on. 97-04-22 ivanw To keep the naming shceme consistent I changed the name of the second column in the ControlCondition table from Control to Control_. Since the Darwin code does not use SQL queries on this table this change should cause no breaks. If some tool accesses this table through a query, the text of the query must be modified. 97-04-22 ivanw Enhanced the FormatSize funtion in the Handler. The words for bytes, KB, MB, GB can be localized. These strings live in the UIText table. Also added a new property called LeftUnit. If this property is set in the Property table, the name of the unit goes to the left of the number instead of the right. 97-04-22 malcolmh ** msi.lib needs to be released to Ship and ShipSym. msid.lib needs to be released to Debug. msil.lib needs to be released to Lego ** 97-04-22 mattwe TestDb: added progress indicator for WriteIniValues 97-04-22 mattwe Repack: Modified rungen.exe UI to be side by side, instead of single long pane. Old one wouldn't fit on low-res monitors. 97-04-22 malcolmh A number of changes to the API have been made: MsiIsProductLauncher has been replaced by MsiVerifyProductLauncher. The following API's have been added: MsiGetFeatureInfo MsiInstallMissingComponent MsiInstallMissingFile The following API's have had their return code changed from BOOL to UINT: MsiGetProductInfoFromScript MsiGetProductCode MsiGetProductProperty MsiCloseProduct 97-04-22 malcolmh Conman::RegisterProduct has been updated to take a cached database path, a launcher commandline, and a launcher path. 97-04-22 malcolmh msi.h is the new API header. It replaces msinst.h. msi.h uses more consistent error return types and contains a revised set of ERROR_* error codes. ** msi.h should be released to Ship, Debug, Logo, and ShipSym ** 97-04-22 malcolmh The API help now has its own helpfile, msi.hlp. API help has been removed from msiauto.hlp. ** Two new files need to be dropped: doc\msi.hlp and doc\msi.cnt ** ----------------------------- Release 0.10.00.2822 ----------------------------- 97-04-21 johndelo RegMsi tool now recognizes K option for Msi kernel (Msi.DLL, MsiD.DLL), but does not register the new DLL by default, YET. 97-04-21 mattwe MsiGen: removed date writing for file version column 97-04-21 bench Added rollback for the WriteIniValues and RemoveIniValues actions. 97-04-21 bench Added a new file to the release, called MSIERROR.H, in the tradition of WINERROR.H. Created a perl script, genmsier.prl, to %darwin%\tools, which creates this file from msinst.h. MSIERROR.H is copied to the DOC folder on the release point. 97-04-21 t-caroln Updated msialter.exe to display the resources in an executable. The -f option will also output file resources to a file in the current directory. Added a -r option to remove all resources in the launcher and then add the new resources in the property file. 97-04-21 t-caroln Added new API GetErrorMessage to Validation object to return the message that maps to the error enum value. "" is returned for an invalid enum. 97-04-21 t-caroln Removed -d option from msidbval.exe. Now to validate a database, use msidbval {database}. Also changed msidbval to output an error message instead of the integer value. 97-04-21 tracyf The AddFixedCost method of the SelectionManager is obsolete and has been removed from IMsiSelectionManager, and from the automation interface. I don't think anyone was ever using this, but I'm noting it here just in case. 97-04-21 chetanp Added Create Table and Alter Table query support. See help on MsiDatabase::OpenView function for more info. 97-04-21 tracyf The new Darwin spec covering the rules for overwriting versioned and unversioned files has been implemented. You can find the "official" spec at http://officeweb/specs, but the new rules are summarized under the help topic for the CheckFileVersion function (part of IMsiPath). To this end, the CheckFileVersion function itself has changed - it now requires an additional string parameter specifying language, and the icfvEnum declarations have changed. 97-04-21 tracyf In accordance with the new Darwin versioning spec, the Version column of the File table no longer accepts # directives (#ALWAYS, #NEVER, etc) or dates. This column now must be either a valid version string, blank (i.e. the file is unversioned), or a companion file reference. The validation table in TestDB has been updated to reflect these new restrictions. 97-04-20 johndelo The launcher now looks for the new combined Darwin DLL, Msi(D).dll, and not finding that, it temporarily looks for MsiEng(d).dll to maintain compatibility for a while. Both DLLs should run equivalently, however custom actions bind only to the new one. 97-04-18 johndelo Moved relnotes through 1996 to relnot96.txt, to shorten file, because it gets mailed and heavily duplicated. ----------------------------- Release 0.10.00.2818 ----------------------------- 97-04-17 johndelo Error code names have changed for the external API, in msinst.h, to use system errors and our new system error codes. The old codes are temporarily mapped to the new ones for a few builds. ERROR_SUCCESS, 0, has not changed. 97-04-17 johndelo The combined engine+services DLL, Msi.DLL (MsiD.DLL) is now made as part of the normal build, along with the import library Msi..lib. The separate DLLs will still be released for a while, and the lauchers in this release, and the Darwin installer, still use the old DLLs. 97-04-17 t-caroln Aimdbval.exe is now msidbval.exe. Help file has been changed to show this. 97-04-17 t-caroln Loadprop.exe has changed to msialter.exe. I have also updated the help file for this. MsiAlter.exe loads both properties and resources into the launcher. It still does not work on Win95 yet. See help file for details on property file format. 97-04-17 chetanp Exposed _Tables and _Columns through the query interface. The catalog tables are now being created with named columns and hence can be queried for their content. Added help on the same. 97-04-16 johndelo The Darwin installer name has changed from AimInst.EXE to InstMsi.EXE. The external database and custom access header is now MsiQuery.h. The combined engine+services is Msi.DLL (not built by default yet - target name: msidll). Error codes for external API are changing - in msinst.h. 97-04-16 ivanw Made some internal modifications to the controls on the Browse dialog in order to minimize the number of (costly) calls to SetTargetPath. To accomplish this I had to add the DoNotCallManager stylebit to the DirectoryCombo control type. This stylebit applied before only to PathTailEdit and DirectoryList controls. 97-04-16 ivanw Implemented the MsiCollectUserInfo API and action. Removed PID validtation from the InstallValidate action. Modified RegisterUserInfo so it registers the user only if there is a valid PID. Added the needed dialogs to testdb (starting with FirstRun). 97-04-16 chetanp The query engine now recognises the catalog tables - "_Tables and "_Columns". However all the columns for these tables are unnamed as yet hence only SELECT * will work for now. Columns that need to be exposed externally will be named and documented soon. ----------------------------- Release 0.10.00.2815 ----------------------------- 97-04-14 tracyf The following new actions are now supported: MoveFiles, DuplicateFiles, and RemoveDuplicateFiles. See the helpfile and TestDB.msi for more info (and note the required sequencing for these actions). 97-04-14 tracyf The Component_Parent column has been removed from the definition of the Component table. The _Validation table has been updated to flag an error in the aimdbval.exe tool if the Component table still has this column. In addition, a runtime "invalid table" error will occur if the installer is run with this column defined. 97-04-14 bench We now rollback automatically after an error or cancellation. The rollback or cleanup of rollback files is invoked by Engine.Terminate. The user is not yet given the option of not rolling back or resuming the installation later. 97-04-14 bench Defined a new reg value that sets the level of rollback. This value is "Mode" under HKLM\Software\Installer\Rollback. If this value is set to "", no backup files or rollback scripts are created. If the value is a number > 0, rollback files are created and not removed after the install. In all other cases, the default behaviour occurs, which is to allow for rollback during an install but remove rollback files after the install is successfully completed. 97-04-14 bench Added an argument to Engine.Terminate. This arg is an iesEnum that is passed to the server for use in rollback handling. This behaviour (along with all things rollback) will be documented shortly. This argument is currently not required in automation to allow testing to update its tests, but will be made required for the 2822 release. 97-04-14 bench Completed rollback for product/feature/component registration and advertisement (except for type libraries). 97-04-11 chetanp Added authoring (and testing) help for Advertisement and Darwin Components. Please refer to help under Authoring in the Darwin help file. 97-04-11 mattwe Repack wiz: Lots of tweaks to improve reliability for relocation, and recovery from "invalid" OEM images. (some files not installed locally, et cetera) Cleaned out MSCREATE.DIR from file table. Removed sub-components entirely, in preparation for Tracy's check-in. Added mechanism to initialize a cache of enums->column names->real columns in cursors to fix dependencies on column orders Begun typelib table population 97-04-11 t-caroln Added a new target to the makefile. Typing make win debug checkdb will automatically build the validation DLL, aimdbval.exe, and testdb.msi and validate it. If the database is valid, it will create a sentinel file checkdb.snt. This will be added to the automatic build process once testdb.msi is valid. 97-04-11 t-caroln Edited aimdbval and validation tools so that they don't require that darwin DLLs be registered. They now instead use LoadLibrary instead of the OLE calls. ----------------------------- Release 0.10.00.2811 ----------------------------- 97-04-10 johndelo Engine now loads services DLL directly, and server loads engine DLL directly, instead of using OLE. Handler still uses OLE, will be fixed in next build. Use UI=B to avoid the need to register DLLs. 97-04-10 johndelo Custom action and authoring tools API checked into DARWIN\INC as AimQuery.w. Would appreciate any review comments before implementation and release. No help yet. 97-04-10 malcolmh Added MsiIsProductLauncher API. See helpfile for details. 97-04-10 malcolmh Added server/conman.Rollback method. See the helpfile for more details. 97-04-10 malcolmh Removed configuration manager methods that were obsoleted by the Installer API. These include: UserInfo Products ConfigureComponent Components ComponentClients ConfigureFeature QueryFeature 97-04-10 chetanp Bumped up the database version due to change in advertise strategy. 97-04-10 t-caroln Added the aimdbval.exe tool to the release process. Also added a help topic for it under the Tools section [where MsiTable and LoadProp.exe] reside. Set up the validation tool module to catch missing data in the _Validation table even if the table does not contain data. 97-04-09 chetanp added seuperseded components info to be passed in to unregistercomponent. This will enable to imsiconfigurationmanager::unregistercomponent function to remove the redirection to itself from the superseded components. 97-04-09 t-caroln Created an AIM database validation console app. It resides in the %DARWIN%\x86 directory. This tool will validate a database using the Validation DLL. To run, be sure to have the Darwin DLL's registered, including the Validation DLL (msival*.DLL) and type aimdbval -d {database}. This will display the results on the screen. 97-04-09 t-caroln Added a new string category for the validation tool. It's the RegPath category and it's for validating registry paths. This is used in the Registry, RemoveRegistry, and RegLocator tables. 97-04-09 chetanp changed advertisement to fit final strategy. added publishcomponent table and publishcomponent handling to handle cross-product component advertisement. added handling for "treat As"ed components 97-04-08 malcolmh The "Launcher" property is now set in CMsiEngine::CreateProductInfoRec if it wasn't already set. Also, if the property wasn't set initially then the instance handle given to Engine::Initialize is used to determine the module path. Previously NULL was passed to GetModuleFileName to determine this path. ----------------------------- Release 0.10.00.2808 ----------------------------- 97-04-05 bench Added automation support for the MsiExecute object. See help for more info. 97-04-05 bench Made some changes to Engine.Sequence. Previously, each call of Sequence would attempt to call ExecuteFinalize (to execute an install script) if it handn't been called yet and display the final dialog. Now, only the first (or outermost) call of Sequence does this. This way, if we actually call Sequence from within Sequence (by placing a top-level action in the sequence table, for example), we only call ExecuteFinalize and display the final dialog at the end of the install, as is the correct behaviour. With this change and others, there are no restrictions to the ordering of actions in the sequence table as there were before, execpt those inherent in the actions (such as having to call InstallFiles after DirectoryInitialize). 97-04-05 bench Made changes to the way the SCRIPTFILE property is used. Previously, if this property wasn't set, we would execute directly if in standalone mode and with a script if in client-server mode. If this property was set, we would create the script but execute it only in client-server mode. Also, if an install actually used more than one script, only the second was saved. Now, our mode of execution is governed completely by the EXECUTEMODE property. We use the SCRIPTFILE property to write a script that is saved after the install and contains all operations used in the install, not just those in the last script. See help for more info. 97-04-05 bench Added the EXECUTEMODE property, which can have values NONE,DIRECT or SCRIPT. This defines if and how we execute operations to update the system. See help for more info. 97-04-04 malcolmh Added 3 conman methods to support rollback script registration: RegisterRollbackScript, UnregisterRollbackScript, and RollbackScripts. See the help file for complete details. 97-04-04 t-caroln Validation tool now records errors found in the _Validation table in the _Invalid table that it creates. These errors include finding a column that is not listed in the table, having the value of the MaxValue col less than the MinValue col, having a category string that is not allowed for the particular data or is not listed, and for having a KeyTable link to a table that could not be loaded. This last error could be because the table is not in the database. ----------------------------- Release 0.10.00.2804 ----------------------------- 97-04-03 t-caroln Fixed localization tool to work with rtf syntax and to correctly update dialog and control attributes. 97-04-03 t-caroln Validation tool now validates tables and databases. Also has an updated help file. Added RedirectComponent table to _Validation table. 97-04-03 chetanp removed the extra ProductKey from several ixo operations beacuse of it being passed in the ixoProductInfo operation. 97-04-03 chetanp Added RedirectComponent table to Darwin 97-04-01 johndelo The launcher may have a property "INSTALLER" which specifies either a relative or absolute path to a Darwin installer, i.e. AimInst.exe. This will be called if the launcher can't find the Darwin API DLL or if Darwin indicates that a newer version is needed. You can call the Darwin installer, AimInst(D).exe, directly, which will simply blast its files into your system directory. 97-04-01 johndelo The Darwin installation code is now contained in IExpress packages, names AimInst.exe, AimInstD.exe, and AimInstL.exe. These are self-extracting executables that install Darwin components into the system directory. Currently they install automation and help; these will later be moved to a separate tool installer. To build these installers, specify aiminst as the target, i.e. "make win debug aiminst". The ALPHA IExpress files are checked in, but untested. The prompt dialogs will be probably be removed in the future. Files that are replaced are unregistered first. ----------------------------- Release 0.10.00.2801 ----------------------------- 97-03-31 t-caroln Fixed validation tool to correctly validate the fields. It should now validate all fields and foreign keys correctly. 97-03-31 t-caroln Fixed the localization tool to work with the new Control and Dialog attributes format. The tool now updates the control and dialog tables, including tab order. However, it incorrectly updates the radiobutton table and tab order. Am working on a fix for that. 97-03-31 ivanw Implemented default text style for the text control. {&style} at the start of the text string sets a default style for the control. For more help see the page on text controls. Modified testdb such that the text controls on the Error and Selection dialogs use this feature. 97-03-31 johndelo The DATABASE property cannot be set on the launcher command line, as all the APIs assume that it is a launcher property. This will be fixed when we store the command line as part of the product state. 97-03-31 johndelo The launcher, INSTALL(D).EXE, no longer depends on Darwin headers; rather, it calls through an added API: MsiInstallProduct. A Unicode launcher can be built by specifying the target "instalw" to make. 97-03-28 ivanw Removed the Help column from the Dialog table. Also removed the Help attribute of the Dialog object. As a result the new build will work with both new and old databases but old builds of the Handler.dll won't work with the new database. ----------------------------- Release 0.10.00.2728 ----------------------------- 97-03-27 bench Rollback of the InstallFiles and RemoveFiles actions is implemented. Note that the Configuration Manager rollback is not yet implemented, so after a rollback, the state of the Config Manager may not correspond to the files on the system. 97-03-27 t-caroln The validation tool is now a part of the release process. This tool is for validation of a database. It can validate a field, row, table, or database. This tool is similar to the localization tool in that it has its own help file. The tool also requires that the database contain the _Validation table. The tool compiles, but has not been tested very well. An error table -- _Invalid table is created during validation of a table or database. In validation of a field or row, the errors are stored in an array that can be accessed with one of the tool's member functions. The tool should help eliminate authoring errors. 97-03-27 johndelo Product properties that must be authored into the Propery table have been defined in engine.h and documented in Property help. Note that many of them are now REQUIRED. Unused definitions and code has been removed to avoid confusion. 97-03-27 chetanp Changed ADVT and UNADVT actions to ADVERTISE and UNADVERTISE actions resp Added DefInprocHandler column to Class table. Sequenced ADVERTISE and UNADVERTISE action through InstallSequence table 97-03-25 mattwe MsiGen: fixed the Class contexts per Chetan's Friday design. (Context column a primary key.) Haven't switched to his current design that the Context column is now a string. (He hasn't checked it in yet.) Populated part of Verb, and most of Extensions. Shortcuts in progress. Wouldn't normally check-in, but this is to release partial work to testing. 97-03-25 tracyf The IMsiVolume FreeSpaceK and TotalSpaceK functions have been changed to FreeSpace and TotalSpace, respectively. These functions now return 512 byte multiples, instead of 1024 byte multiples as before. 97-03-25 ivanw Added a new dialog style bit: TrackDiskSpace. If this bit is set, the dialog periodically calls the SelectionManager to check if we are out of disk space. This way we can catch if the user switched to an other application and changed the available disk space while Darwin is running. 97-03-25 chetanp implemented "permanant" components. If a component is installed locally, and its key file has the "permanant" bit on in the Attributes column of the File table, then we make the system a client of the component, thereby preventing its uninstall. 97-03-25 t-caroln Added a new column to the _Validation table. It is the KeyColumn column and is used in conjunction with the KeyTable column. The KeyColumn column tells which column the data is a foreign key to in the KeyTable column. ----------------------------- Release 0.10.00.2725 ----------------------------- 97-03-24 johndelo Help and automation is now available for Storage::Class property. The CLSID associated with the storage is used to identify the contents of a storage object. 97-03-21 tracyf Two new actions are now supported: MoveFiles and UnmoveFiles, complete with lots o' documentation in the help file. I also checked in changes in TestDB to make use of these new actions, but you won't see much difference unless you place a few appropriate files to be moved into particular source directories on your local machine. I leave it as an exercise for the reader to figure out what files to put where, in case you want to see file movement in action. 97-03-21 ivanw Checked in the new control and dialog style bits. Modified testdb to reflect the new changes. Also added the new values to the help pages of the individual control styles. ----------------------------- Release 0.10.00.2721 ----------------------------- 97-03-20 chetanp Added support for sharing Darwin components. 97-03-20 ivanw Checked in a VB script under darwin\tools\stylecon.xls that can convert the control and dialog stylebits of an existing database to the new values. The new stylebits will take effect with the 3/25 build. 97-03-19 davidmck Checked in build 600 of the diamond decompression libraries. These support LZX decompression. 97-03-19 ivanw Per Paul's request the automation wrapper for Dialog.WindowShow has been renamed to Dialog.Visible. It is a write only property. 97-03-19 malcolmh Removed GenerateProductKey from conman API and fixed all references to it. The product code is now authored in the property table. Updated transform validation to use new product code. 97-03-19 mattwe MsiGen: populated MIME table from registry keys MsiGen: populated most of Class table from registry keys waiting on ChetanP to finalize design 97-03-18 johndelo The Darwin-private properties have been removed from the SummaryInformation stream (by request of Office). Most of these were not being used anymore, as the user info is now accessed via the MSI API functions. 97-03-18 johndelo Some Darwin GUIDs have been changed to remove collisions, mostly automation GUIDS. To avoid orphaned reg entires, you need to unregister all current Darwin components before building or installing the new ones. 97-03-18 ivanw Removed the ValidateUserInfo action. Part of it became obsolete because of the ValidateProductID method, the rest has been moved into the RegisterUserInfo action. 97-03-18 bench The behavior of MsiPath.Remove has changed slightly. Now, if the directory is empty but still cannot be deleted for any reason, an error is generated. Previously, no error was generated for read-only directories or sharing violations. ----------------------------- Release 0.10.00.2718 ----------------------------- 97-03-17 ivanw Implemented the MaskedEdit control type. Created a ValidatePID controlevent. Added a ValidatePID method to the Engine. Added a dialog to testdb to demonstrate all the above. ----------------------------- Release 0.10.00.2714 ----------------------------- 97-03-13 t-caroln Checked in the _Validation table to the darwin\data\testdb. This is a new table that will not be shipped. It is for authoring purposes and will be used by the Validation API. Help on this table has been added to the database tables help topic. Look under database tables and then Validation to get to the help file page. This table will have to be updated as not all data is correct, but it is a workable schema for now. 97-03-13 johndelo New APIs have been added to the end of MSINST.H. These will support functionality required by applications and system, but are not implemented as yet. 97-03-13 johndelo Access97 can now be used to edit Darwin databases, and can handle large text fields. MsiTable can now create new Access databases as well as Msi databases, using the -c option. MsiTable /? for its help screen. There are two mechanism for dealing with large text fields: 1. Text fields can be specified with widths from 1 to 255 (S1 to S255 in the .idt header). Any text field written to an Access table that overflows this limit will be written to the _Overflow table, indexed by a numeric key. In its place will be place the index number preceeded by two plus signs. On access of the text data, the indirection will be performed and the long data will be returned. This will catch any text data that overflows the column specifications. The overflow table entries will not be removed if the related data value is deleted or changed, but of course will go away when importing to a created database. 2. The above should not normally happen. Text widths should be carefully chosen to limit the text where that is appropriate. For columns that are >255, essentially unbounded, use S0 for the column specifications, and a Memo field will be created which appears within Access just like a normal text field. There is very little overhead in doing this, the only disadvantages being the inablility to sort by or search in these fields. I have changed the Control.Text column to be S0, and Import, Export, and Install all work fine from and .MDB database. The ODBC support now only works with the current Office97 or Access97 Jet drivers. It no longer works with Access95. Access fails to return the nullable state of a column and no workaround can be found. For now, when exporting from Access, primary key columns are set non-nullable, and all other are set to what Access reports (which is always nullable). The new _Validation table contains the correct nullable state. 97-03-13 malcolmh MsiEnumComponents, MsiEnumFeatures, and MsiEnumClients are implemented. See the help file for details. 97-03-13 tracyf Feature management in the SelectionManager has been fixed up, in concert with the changes made by Ivan in the UI. The major change is that when a feature, whose parent is turned off, is turned on, the SelectionManager now turns on all parents up the tree. Special care is taken to ensure that only the selected child feature is activated when the parent(s) are turned on. 97-03-13 malcolmh Added basic Installer Services API tests to %DARWIN%\test\apitest. Use MAKE ANSI or MAKE UNICODE in that directory to build either APITESTA or APITESTW. Use /? on either of these EXEs for help. Note that by default C:\darwin\build\x86\msiengd.dll is tested. This can be overridden in the makefile or on the command-line to APITEST?. 97-03-13 mattwe MsiGen: major check-in. The database is now relocatible, (properties are substituted for hard coded paths, this also involved making all primary keys for directory entries lower-case) and I've started playing catch up to all the new advertisement tables (MIME, Extension, et cetera) and the new columns in the old. Also fixed bugs in AlanR's code, including an extraneous cursor->Next() in MakeDirPathTab, also gave this temporary table an optional persistent flag for debugging purposes. Updated the hungarian in several places, making the variable naming more consistent, and added comments to several functions. Per our spec, MsiGen now only really works for sysdiff conversion on a machine that nearly matches the "reference" machine on which the $OEM$ image was created. See me if you want to learn about Win32 remote debugging. 97-03-11 ivanw Changed several aspects of the behaviour of the SelectionTree control. When a parent is deselected, the children are not hidden. Changed the icons. When a child of an unselected parent is turned on, the parents are repainted. We know distinguish between CD and network installs. To do this I had to change the set of strings in the UIText table used by the control. 97-03-11 ivanw Added a new controlevent: SelectionPathOn. Using this we can hide the text on the selection dialog, when there is no user configurable path. See testdb for an example of the use of this event. 97-03-11 bench Updated the ixoFileCopy, ixoFileRemove, ixoShortcutCreate, ixoShortcutRemove and ixoIniWriteRemoveValue operations to register created folders when writing to a folder. Also, these operations now attempt to remove any registered folders when removing files. We should no longer be leaving any folders around that we created after we uninstall. See help for more info. 97-03-11 bench Added the CreateFolders and RemoveFolders actions and the CreateFolder table. See the help for more info. 97-03-11 bench MsiPath.EnsureExists now returns the number of folders it actually created. See help for more info. 97-03-11 bench The MsiFileCopy.CopyTo and MsiServices.WriteIniFile methods now fail if the target directory they are writing to does not exist. ----------------------------- Release 0.10.00.2711 ----------------------------- 97-03-10 malcolmh Changed Conman::RegisterFolder interface. Added Conman::IsFolderRemovable. See help file for details. ----------------------------- Release 0.10.00.2710 ----------------------------- 97-03-07 bench Added the ValueExists method to the MsiRegKey object. See help for more info. ----------------------------- Release 0.10.00.2707 ----------------------------- 97-03-06 chetanp added data to the advertise tables. TO DO - add a real OLE server for test purposes 97-03-06 chetanp Added unadvertise stuff. Currently punted to unadvertise after a remove all. 97-03-06 ivanw Checked in the new version of the profiler (IceCAP 3.5). Added some files needed and modified the makefile to build the profiler build correctly. Also checked in the documentation for the new IceCAP under darwin\doc\icecap. 97-03-06 tracyf Reinstall checksum verification has been implemented, which involves a new IMsiPath function (GetFileChecksum, which is broken up into two automation interfaces - ComputeFileChecksum, and GetFileOriginalChecksum). Also, files in the File Table have a new 'ValidChecksum' attribute bit. See the relevant new help topics for more info. 97-03-05 bench Added the Seek method to the MsiStream object. See help for more info. 97-03-04 tracyf A new "coding conventions and code review guidelines" topic has been checked into the helpfile. You'll find it under the "Development Topics" section in the contents. 97-03-04 bench Added the ixoProductInfo operation, which should always be the second operation in a script file. Removed the ProductKey argument of ixoProductRegister and all arguments of ixoAdvertiseProduct. 97-03-04 chetanp ProcessComponents is now a mandatory action required for the registration of components with the configuration manager. Help needs to be put in. ----------------------------- Release 0.10.00.2704 ----------------------------- 97-03-04 chetanp Bumped up engine version because of new tables and Component table change. Need to fix databases and bump up their versions to .15 97-03-04 chetanp Changed tables Component, Typelib - see help file Added tables Class, Icon, Extension, Verb, MIME, AdvtSequence for advertisement 97-02-28 johndelo Slight changes to script format to accomodate larger number of arguments. The encoding of integers and strings are unchanged. See help file for details. 97-02-28 ivanw Added a new, optional table: the CheckBox table. This table defines the value the property is set to if the checkbox is turned on. Added a ReinstallMode dialog to the maintanence mode wizard sequence to demonstrate the use of these new features. 97-02-28 ivanw From now on the argument of a control event in the ControlEvent table can be any expression that can be evaluated by Engine::FormatText. To facilitate this change a number of methods in the Event class were changed, they take IMsiString& as an argument instead of an MsiStringId. Also the ArgumentInt and ArgumentString dialog attributes are replaced by the Argument attribute, that returns the string representation of the argument for the action that terminates the dialog. 97-02-28 bench A rollback script is created each time a script is run, which occurs during an install in client-server mode. The rollback scripts are put in the MSI directory and are named RBS*.tmp. The rollback scripts may be run with msiexecd /i. Currently, the WriteRegistryValues and RemoveRegistryValues actions can be rolled back (with the exception of deleting entire reg keys). 97-02-28 bench Removed the ixoRegOpenRootKey operation. Now, the parameters to ixoRegOpenKey specify both the root and the key to open. Removed the arguments to ixoRegCreateKey and ixoRegRemoveKey. These ops act on the key set by ixoRegOpenKey. 97-02-28 chetanp The maintenance mode database is now not created. We now store the product installation info in the registry. Also the first cut of the advertisement info that Darwin provides is in. ----------------------------- Release 0.10.00.2628 ----------------------------- 97-02-26 malcolmh The MsiQueryFeatureState is now implemented. It's part of the Installer Service API. ----------------------------- Release 0.10.00.2626 ----------------------------- 97-02-25 ivanw The Scrollable Text control has been completed, so it reads the text to be displayed from the text field of the Control table, instead of using a hard coded license agreement text. The text must be in RTF. ----------------------------- Release 0.10.00.2625 ----------------------------- 97-02-21 malcolmh MsiQueryProductInfo and MsiGetUserInfo are now implemented. These are both part of the Installer Service API. To use this, or any other of the API functions, #include and link to msinst.lib. Msieng(d).dll contains the implementation of the API. ----------------------------- Release 0.10.00.2621 ----------------------------- 97-02-19 tracyf The InstallFiles action (and ixoFileCopy execution action) has been modified so that verification of file versions is performed again at actual script execution time (it's still also done up front for costing purposes). This involves a lot of internal changes in the InstallFiles action, especially in conjunction with CompanionFile functionality (a new ixoSetCompanionParent execution action has been created), so this is a heads-up to testing. 97-02-19 tracyf Feature Reinstall is now implemented. This involves two new properties, "REINSTALL" and "REINSTALLMODE", as well as new SelectionManager methods: ConfigureFeature, SetReinstallMode, and ProcessPropertyFeatureRequests. These new properties and methods are documented in the help file, and I've also added a new authoring topic: "Reinstalling and Removing Features", which you'll find under the main "Authoring" topic in the Contents. The only caveat: all of the reinstall modes listed in the "REINSTALLMODE" property topic are implemented, except for "c" (checksum verification). I'll get that one done soon. 97-02-19 tracyf For consistency, the USESOURCE and ADD property names have been changed to ADDSOURCE and ADDLOCAL, respectively. 97-02-18 ivanw Added ReinstallMode control event, that calls the SetReinstallMode method of the SelectionManager. ----------------------------- Release 0.10.00.2614 ----------------------------- 97-02-12 t-caroln Fixed GenerateTransform and SetTransform to comply with the current database implementation. If the naming of binary stream should ever change again, it must also change in the CompareRows function of the database where the transform computes the stream name. 97-02-11 t-caroln GenerateTransform now handles the possibility of null streams. Stream data is written out differently to the transform file as well. A zero is recorded if the stream is NULL while a one is recorded if the stream is not null. The actual stream exists elsewhere in the transform stream storage. ----------------------------- Release 0.10.00.2611 ----------------------------- 97-02-10 chetanp added type library registration functionality look for the help on the RegisterTypeLibraries and UnregisterTypeLibraries actions and the TypeLib table. 97-02-10 davidmck Moved the debug log file from the root of the c drive into the \windows\msi directory and had its name created using GetTempFilename() so that multiple instances can create their own files. 97-02-07 ivanw The Value and Text fields of the RadioButton, Listbox, Combobox and ListView tables may now contain any expression that FormatText can handle. For example, on selecting a radiobutton we can set a property to an expression that depends on the current value of some other property. The same change was made to the argument of the [Property] control event in the ControlEvent table. Added a couple of dialogs to testdb to demonstrate this new feature. ----------------------------- Release 0.10.00.2607 ----------------------------- 97-02-06 ivanw Added four new control events: AddLocal, AddSource, Remove and Reinstall. Also added a reinstall option and a new dialog to testdb. 97-02-06 bench The following folder properties are no longer being set by MsiServices.SetPlatformProperties: CommonDesktopFolder CommonProgramMenuFolder CommonStartMenuFolder CommonStartupFolder Instead, the DesktopFolder, ProgramMenuFolder, StartMenuFolder and StartupFolder properties are set to folders in the "All Users" profile if such a profile exists and the ALLUSERS property is set. Otherwise, these properties are set to folders in the user's personal profile. MsiServices.SetPlatformProperties accepts a boolean argument: True to set the above properties to the "All Users" folders, false to do otherwise. 97-02-04 t-caroln The MergeDatabase method has been implemented. It is a method of the database object. The help file has also been updated with this information, including required arguments. ----------------------------- Release 0.10.00.2604 ----------------------------- 97-02-03 t-caroln Changed naming of streams. Stream names now follow format table.key1.key2 etc. Any old database tables must be rebuilt to account for the name changes. 97-02-03 chetanp Added support for SELECT * queries. 97-02-03 chetanp Any Delete* actions in the installs.idt table should now be renamed to Remove*. Contrary to previous comment, we are NOT bumping the engine version since this is a database content change and NOT a structure change. 97-02-03 ivanw Removed the Install control event. The selection manager sets a property called OutOfDiskSpace if some volume is out of disk space. The UI can branch depending on this property. See testdb for an example how to use this new mechanism. 97-02-03 tracyf The SelectionManager now maintains an "OutOfDiskSpace" property, which has a value of TRUE if at any time any volume has insufficient disk space for the features currently selected. Authors can now use this property to decide whether to allow transitions between dialogs if a disk space problem exists. The TestDB will be modified to demonstate this usage. 97-02-03 chetanp changed all Delete* action names to Remove* for consistency. However we decided to let the complementary actions have any one of the forms - Install*, Add* or Create* to indicate the exact nature of interaction with the user m/c. NOTE: This change makes services and engine incompaible with previous databases. But another change has already caused this to happen for the next build. So am not bumping up the ref count. 97-01-31 tracyf A 'Vital' attribute bit has been added for files in the File Table. This bit allows the author to specify whether an error preventing the file from being installed can be ignored or not. See the File Table help topic for more info. 97-01-31 bench Exposed the ExecuteRecord method of the Engine. This can be used to execute the server operations. Also, the opcodes have been exposed in the typelib. The operations are documented in the help under "Operation as an Install Server." Unless otherwise noted, all operations should be fully testable. ----------------------------- Release 0.10.00.2530 ----------------------------- 97-01-29 tracyf The concept of allowing a child Feature to follow the RunFromSource status of its parent has been restored (this capability was unintentionally lost when the transition from Selections to Features/Components was implemented. See the Feature Database Table topic in the helpfile for more info. 97-01-29 johndelo Sequence table alert: The desciption column for the sequence tables has been removed, replaced by the ActionText table, which includes Description and Template columns. For several releases the old format will be supported until the doc and existing databases have been updated. ----------------------------- Release 0.10.00.2529 ----------------------------- 97-01-28 bench MsiPatch: GenerateAcmePatchInformation method added. See help for more info. 97-01-28 ivanw Modified the selection tree control, to use the GetFeatureValidState. Only the valid choices show up in the popup menues. ----------------------------- Release 0.10.00.2528 ----------------------------- 97-01-27 ivanw Added a new dialog attribute and style bit: KeepModeless. If this is set, the existing modeless dialogs are not destroyed when the new dialog is created. A typical use of this bit would be for the FilesInUse dialog. 97-01-27 johndelo The value of the ACTION property is now case-insensitive. This is the top-level action performed by the engine when the launcher calls DoAction(0). Only actions with upper-cased names can specified by the launcher. Currently this means INSTALL, ADMIN, and PATCH, but more will be added. 97-01-27 tracyf Added a new "GetFeatureValidStates" API to the Selection Manager. See the helpfile for more info. 97-01-27 ivanw Changed the TextStyle table, such that the color is described with an integer (RGB) instead of a word. Also added some code to check if the authored text color is too close to the dialog background. If it is, the default text color is used. 97-01-24 johndelo ---Changes to Darwin Launcher--- Most of the guts have been removed from the launcher to make it less dependent. When installing a new product on demand the launcher is not executed, therefore the engine must get the properties out of the resource. The following changes have been made: 1. The launcher startup window is gone, and nearly all of the error handling is gone. 2. The engine puts its default modeless dialog up at the start (UI needs some cleanup). 3. The temp property file passed to the engine is gone; the command line is passed instead. 4. The engine now pulls properties from the command line and launcher resources. 5. The engine processes error messages during initialization, using strings in the launcher. 6. The launcher error message strings now have MsiRecord markers, i.e. [2]. 7. The launcher has a required property, MESSAGEBASE, supplying the offset into the string table. 8. The property INSTALLERFILES is used by the launcher as the list of files to install. 9. The launcher will selfreg installed DLLs, and pass -RegServer to EXEs. 10. MsiEngine.Initialize now takes a command line instead of a property file. 11. The MAC code is no longer in the launcher. It is archived in LDWINMAC.CPP. 12. A single string is now invoked for command-line help: /? or -?, not a set of resources. 13. The debug command option "??" no longer functions. Another mechanism will be implemented. The next step will be to remove the Darwin installation code from the launcher and put it with the components in a separate package that can be downloaded from the internet or be placed on the CD. The INSTALLER property will specify the path to this package. Until this happens, the ability to force install of Darwin using '@' is not available.  ----------------------------- Release 0.10.00.2524 ----------------------------- 97-01-23 chetanp Added BindImage stuff to automation. BindImage passed preliminary testing as regards a simple file with links only into user32.dll. Bind worked fine on both Win 95 and Win NT. The bound file worked well in both cases on both platforms. 97-01-23 alanr MsiGen: Added Feature and FeatureLevel properties. 97-01-23 bench MsiPatch: Patch creation has changed dramatically. See the help file for more info. Also, the help file should be completely up to date. If it's in the help file, it should work. There is not yet patch application support for these patches. 97-01-22 chetanp added BindImage table. 97-01-22 chetanp Added BindImage function to services. Fixed conflicts with imagehlp files 97-01-21 malcolmh The behavior of the /regserver and /regservice flags for msiexec(d) have changed. 1) /regservice is no longer a valid option 2) /regserver now does what /regservice used to do, i.e. attempt registration as a service but fall back to a server if that fails 3) /regnoservice registers the install server as a server regardless of whether registration as a service is possible This change makes our launcher consistent in that it can DllRegisterServer all DLLs and /regserver all EXEs without specific knowledge of the particular DLL or EXE. ----------------------------- Release 0.10.00.2521 ----------------------------- 97-01-20 chetanp Added registry support for REG_EXPAND_SZ Added support for creation and deletion of registry keys. Added ixoRegCreateKey, ixoRegDeleteKey opcodes in executor 97-01-20 alanr MsiGen: Replaced ROOTDRIVE references with TARGETDIR. 97-01-17 malcolmh Added messages to the actions that occur while the PreAction dialog is displayed. Remember that all actions that don't call ExecuteRecord must send either ActionData or Progress messages to the UI to keep it awake. ----------------------------- Release 0.10.00.2517 ----------------------------- 97-01-16 chetanp added Proxy table help. 97-01-16 alanr Added Cursor.DateData automation read/write support for long integer value columns (previously only supported string values). 97-01-16 mattwe MsiUtil: Fixed typo in ODL MsiUtil.BuildCompletProject -> MsiUtil.BuildCompleteProject Darwin Bug #734 97-01-16 davidmck Added code in engine to allow for reference tracking. Involved moving function name code into module.h so all could share. 97-01-15 ivanw Added the ability to change fonts, style, font size and font color in text controls. To see this in action run testdb with UITEST=1. For information how to use it, see the help pages for the TextStyle table and the Text control type. ----------------------------- Release 0.10.00.2513 ----------------------------- 97-01-09 johndelo MsiDatabase.Export will now export summary information stream to an .idt file as if it were a table. Import has always accepted this table which contains pairs of integer PID with string|integer|datetime data. MsiTable.EXE has also been updated to show the table in the list box and to copy it with the '*' wildcard. ----------------------------- Release 0.10.00.2509 ----------------------------- 97-01-08 ivanw When a control is activated it can set a property to the present value of an other property (with arbitrary number of indirections). Untill now controls could set a property only to a constant value. If anybody needs more complex cases (like setting a property to some expression) let me know. 97-01-08 ivanw Added an admin install wizard sequence to testdb and the template database. ----------------------------- Release 0.10.00.2508 ----------------------------- 97-01-07 alanr Added new Cursor.DateData automation routine for reading date fields from tables. 97-01-07 bench Changed AdminInstallFinalize action to only copy the necessary Msi files (not Msi*.*). The copied files are the same that would be installed with "install ACTION=@". The ship launcher will copy the ship components and the debug launcher will copy the debug components. Currently no error occurs when a file is missing. 97-01-07 bench Added the AdminInstallFinalize action, which copies the launcher, database and Msi* components to the location defined by TARGETDIR. Launcher: always copied directly to TARGETDIR Database: if the DATABASE property is not defined in the launcher, an error will occur. Use loadprop.exe to add this property to the launcher. If DATABASE is defined and is a full path, the database is not copied to the admin point. If DATABASE is defined and is a relative path, the database is copied to the relative path below TARGETDIR. Note, setting DATABASE on the command line to the launcher has no effect on this logic, as that only sets the property in the database and not in the launcher's resource. Msi* components: If the INSTALLER property is defined in the launcher and is a full path, no components are copied. If the INSTALLER property is not defined, the components are assumed to be located in the same directory as the launcher. If the INSTALLER property is defined and is a relative path, the components are assumed to be in that directory beneath the launcher and are copied to that directory beneath the admin point. Currently, all MSI* files are copied from the appropriate directory. I have also added this action and ExecuteFinalize to the AdminSequence table of the testdb. ----------------------------- Release 0.10.00.2507 ----------------------------- 97-01-06 chetanp Changed Shortcut and ProgMan tables and related actions to allow for shortcuts/progman items to files AND folders not installed by the current product. See help on the tables and MsiEngine::FormatText function for more help. 97-01-06 chetanp enhanced FormatText functionality to allow for File table and Component table keys. See MsiEngine::FormatText help for more info. 97-01-06 tracyf InstallFiles action now performs a separate query for Admin mode, thus copying all files in this mode. 97-01-06 bench The DirectoryManager has been updated in the following ways. When in Admin mode, SetTargetPaths only uses property values for the roots and not for non-root directories. Also, SetTargetPaths does not set properties when in Admin mode. When not in Admin mode, the value of the ROOTDRIVE property is used to resolve any undefined roots. In Admin mode an error still occurs if a root is undefined. 97-01-06 bench The Directory table in the testdb has been updated to reflect the change in philosophy regarding the root directory names. In short this philosophy is to not use ROOTDRIVE as a directory name and to use TARGETDIR as a directory name. ----------------------------- Release 0.10.00.2503 ----------------------------- 97-01-02 chetanp Added support to FormatText (that expands property strings) to handle 1. #File where File stands for a key in the File table. The property is expanded to a full file path. 2. $Component where Component stands for a key in the Component table. The property is expanded to a Directory of the Component (taking into consideration whether the Component is selected to be installed to run from source or local). 97-01-02 chetanp Added Feature support to the Configuration Manager 97-01-02 chetanp Added registry compatibility to the configuration manager 97-01-02 chetanp Added functionality to Darwin to manage Features from Properties 97-01-02 chetanp Added functionality to msiexec so as to be able to configure features/ uninstall product from command line. Type msiexec /? for more.