Darwin Setup Development Notes for Testing Releases 99-02-10 murate Implemented COM+ Registration support. ----------------------------- Release 0.10.0210 ----------------------------- 99-02-09 bench bug 8766: fixed problem caused when the logon user name begins with a '#'. we were failing to write a value to the InProgress key, causing all installs to fail. 99-02-09 cgouge Bug 8384. Memory leak in mergemod.dll. Reference counts in enumerators were off by 1 due to problem in clone methods. (SDK issue only). 99-02-08 cgouge Bug 8804. Extension.Extension, Verb.Extension_, MIME.Extension_ changed to type "Text" to match Docs/usage. (no code change) 99-02-08 cgouge Fixed bug 8802. Using "][" in a formatted field would cause a crash/freeze during internal field validation. 99-02-05 bench bug 8784: fixed error that occured when patching a per-machine install including transforms. 99-02-04 cgouge Bug 8771, Validation. ICE09 was incorrectly requiring that all components installed to the system folders have keyfiles with system bits set. The only requirement is that the permanent bit be set (and it is a warning anyway.) Removed the incorrect check. 99-02-04 cgouge Bug 8747, Validation. ICE24 would print garbled error messages due to a bad formatting string. ----------------------------- Release 0.10.5003 ----------------------------- 99-02-03 johndelo bug 8758, fix UILevel property to match INSTALLUILEVEL_* values so that conditional logic works properly. Previously was set to different internal enum values, and was always set to default when running in service. UILevel Property help topic has correct values, but note that this topic is an automation topic, and not an install engine property. Doc topic will be added on this. 99-02-03 johndelo German template.msi received and added to localized list. templates\intl\template.DEU 99-02-03 eugend Fixed bug # 8748. From now on, the SelectionTree control will stop displaying features (nodes) in bold. 99-02-02 malcolmh Fixed bug 8755. Fixed creation of shortcuts on the desktop when profile folders are redirected. 99-02-02 chetanp bug 8740 - changed use of TextSize to CharacterCount when using the Remove string manipulation fn. 99-02-02 bench bug 8721: we now schedule the ttfcache file for deletion even if it doesn't exist before shutdown. ----------------------------- Release 0.10.4930 ----------------------------- 99-01-30 johndelo bug 8703, ObjectSafety interface by default now returns not safe for scripting. Can be overridden by MSI policy setting "SafeForScripting" = 1 99-01-30 johndelo bug 8687, permanent ODBC drivers should never be unregistered 99-01-30 bench bug 8258: on some installs with the ForceReboot action, and "error accessing install server" error would pop up after the reboot. This was caused by an RPC failure in CoCreateInstance when attempting to connect to the install server. The fix is to retry the CoCreateInstance call when an RPC error is encountered. We will retry once every 100 ms for at most 30 seconds. 99-01-28 malcolmh Fixed bug 8700: If you attempted to prepend a value to an environment variable on NT, and the existing value has an embedded environment variable, then we'd incorrectly add "#%" in the middle of the environment variable. 99-01-28 chetanp backed out bug 7412 changes due to office triage punt. 99-01-28 chetanp bug 7412 - add bit to reinstall user data as well during implicit reinstallation during MsiProvideComponent, MsiProvideQualifiedComponent and MsiProvideComponentFromDescriptor 99-01-28 chetanp bug 8698 - use of uninitialised buffer. Use CTempBuffer.Resize inplace of SetSize. 99-01-27 chetanp bug 8553 - we now ensure that a feature had been explicitly selected to be installed (locally or RFS) and dont promote an advertised feature to installed just because all its components are present. 99-01-27 chetanp Bug 8662, handle -1 roots as registry key paths for components 99-01-27 cgouge Bug 8678, validation. ICE14 modified to do a case insensitive compare when checking to see if a Feature is its own parent. 99-01-26 malcolmh Fixed bug 8622. We have two new private properties relating to our new public property security mechanism: RestrictedUserControl - should be set by darwin whenever we're in the mode of restricting which public properties get sent to the server side. authors can use this property to conditionalize certain dialogs and actions. EnableUserControl - is the equivalent to the policy of the same name. is essentially equivalent to a "*" for SecureCustomProperties - when this property is set, all public properties will always be passed across to the server when installing or otherwise configuring this pkg. 99-01-26 cgouge Bug 8570, Property table schema changed to allow unlimited length in the Value column. Changed in schema and all built databases. 99-01-26 mattwe 8066: picked up new versions of shfolder.dll from: Alpha=\\iepub\pubs.ie5\BLD1321.1\ALPHA\flat\retail\en\alpha x86=\\iepub\pubs.ie5\BLD1321.1\x86\flat\retail\en\winnt ----------------------------- Release 0.10.4926 ----------------------------- 99-01-25 bench bug 8480: check in version 1.94.319 build of mspatcha.dll and mspatchc.dll. the fix taken solves a bug when patching certain files on Win9X. ----------------------------- Release 0.10.4922 ----------------------------- 99-01-21 malcolmh Fixed bug 8416: Security problem with custom action DLLs present on system with higher version We now **as our default** ignore public properties that aren't in our approved list or in an author-specified list. The author can extend our approved list by setting the "SecureCustomProperties" property to a semi-colon delimited list of properties that are to be allowed in addition to the properties in our hard-coded approved list. We will, however, respect _all_ public properties (our former behavior) if any of these conditions are true: 1) The user is on Win9X. 2) The user is an Admin. 3) The per-machine "EnableUserControl" policy is set to 1 4) The product is not being installed elevated (i.e. is unmanaged) Our hard-coded list of properties that we allow is: FILEADDLOCAL COMPONENTADDLOCAL COMPONENTADDSOURCE COMPONENTADDDEFAULT ALLUSERS SCRIPTFILE EXECUTEMODE PRODUCTLANGUAGE TRANSFORMS REINSTALLMODE RUNONCEENTRY CURRENTDIRECTORY CLIENTUILEVEL CLIENTPROCESSID ACTION CURRENTMEDIAVOLUMELABEL INSTALLLEVEL REINSTALL FEATUREREMOVE FEATUREADDLOCAL FEATUREADDSOURCE FEATUREADDDEFAULT FEATUREADVERTISE PATCH SECONDSEQUENCE TRANSFORMS TRANSFORMSATSOURCE TRANSFORMSSECURE CURRENTDIRECTORY MIGRATE LIMITUI LOGACTION UPGRADINGPRODUCTCODE REBOOT SEQUENCE NOCOMPANYNAME NOUSERNAME RESUME PRIMARYFOLDER SHORTFILENAMES INSTALLLEVEL MEDIAPACKAGEPATH PROMPTROLLBACKCOST ODBCREINSTALL 99-01-21 chetanp bug 8476 - directly use HKLM\S\C in place of :RegOpenUserClassesRoot in case our caller is the local system but is not impersonated. 99-01-21 chetanp bug 8470 - I have made all the words in our query dictionary as uppercase. As per the triage's decision I have NOT changed the string compare to a case sensitive compare. 99-01-21 malcolmh Fixed bug 8134. Fix impersonation during CreateFileFromData. This allows us to write icon and transform data during app deployment even when user profiles are redirected to a network share. 99-01-21 malcolmh Fixed bug 8483: We now have an HKCU version of our ResolveIOD key. It's at HKCU\Software\Microsoft\Windows\CurrentVersion\Installer\ResolveIOD. If an EXE appears under either the HKCU or the HKLM key then we'll allow install-on-demand. 99-01-21 tracyf Fixed bug 8471 - avoid potential internal error when user cancels. ----------------------------- Release 0.10.4920 ----------------------------- 99-01-19 johndelo bug 8440 - unbind ODBC driver manager DLLs before file copy to prevent file in use, which then caused mismatched ODBC DLL versions during IE install. 99-01-19 johndelo bug 8435 - corrupted Thai, Vietnamese InstMsi.msi bug 8399 - bad/missing error 1639 resources in 5 languages 99-01-19 chetanp bug 8213 - fixed crash due to attempting to call RemoveFontResource on a font that is being used by the system. 99-01-19 chetanp fixed bug 8450 where we were not properly creating shortcuts for RFS components in multi-user scenarios 99-01-19 bench bug 8455: fixed an error in the InstallFiles action when installing from a URL location. 99-01-19 bench bug 8460: fixed alpha-only bug that caused self-reg to fail for dlls that linked to other dlls not located in the %path%. ----------------------------- Release 0.10.4919.1 ----------------------------- 99-01-19 tracyf Fixed bug 8433 - prior to the fix, an install using the MoveFile table would fail with a fatal error if the source file to be moved was in use. ----------------------------- Release 0.10.4919 ----------------------------- 99-01-18 malcolmh Fixed bug 8413: Error 1310 copying Excel.pip and Error 1406 writing some nls registry when boot XL after upgrade to NT5. This fixes a failure that occurs when Darwin is: 1) Doing an un-managed install and 2) Installing over an existing ACL'd file and 3) The file we're installing has the read-only attribute set. ----------------------------- Release 0.10.4915 ----------------------------- 99-01-13 bench bug 8259: since the RunOnce key has a 256-character limit for the command line, we now store the after-reboot command line for ForceReboot installs under HKLM\SW\MS\Windows\CV\Installer\RunOnceEntries. the RunOnce command line is now just "msiexec /@ XXXXXX" where XXXXXX is the name of the value in the RunOnceEntries key with the rest of the command line options. note that this fix also provides the fix for bug 7777. the original fix for 7777 was partially removed. 99-01-13 eugend Addittion to my 98-11-11 entry: PathEdit is another control that always uses fonts in the user's default UI character set. ----------------------------- Release 0.10.4913 ----------------------------- 99-01-12 mattwe 8253: msiexec /regserver wouldn't actually re-register msi.dll when the inprocserver32 registry entry was correct. This prevented NT upgrades from working when the other info from msi.dll was changed. 99-01-12 eugend Fixed bug # 8244. UsersLanguage style bit can be set now for ListBox and ComboBox controls as well. I've updated doc bug # 7631 to track this change. ----------------------------- Release 0.10.4912 ----------------------------- 99-01-08 cgouge Bug 8327: Validation. ICE30 added support for directories whose target path is set by either a Darwin or user-defined property. Previously, it was possible for a directory set in this way to report a collision if the source directories were the same. It now maps these directories to the different target locations. 99-01-08 bench bug 8365: fixed problem caused when patching an admin image where the package had TempFolder in the Directory table. this broke Office admin patching. ----------------------------- Release 0.10.4908 ----------------------------- 99-01-07 mattwe bug 8331: made a pair of fixes for maintaining ACLs on files already on your system when replace the underlying bits. One involved periodically dropping the ACLs, and the other involved always dropping large ACLs. This is a fix to problems introduced in bug 6456. 99-01-07 bench bug 8329: removed msidbUpgradeOperator enum from msidefs.h, which was inadvertently left behind when we removed support for the Upgrade table (on non-NT5 systems). ----------------------------- Release 0.10.4906 ----------------------------- 99-01-05 cgouge Bug 8276: Validation. ICE15 modified to accept multiple extensions associated with a single MIME type. As long as a circular reference exists between a MIME type and an extension, other MIME types can reference that same extension and other extensions can reference that same MIME type. 99-01-05 mattwe Fixed bugs 8155 and 7193: Due to serious performance and not-so-serious implementation bugs with GetNamedSecurityInfo API in NT4-SP4, we have switched to GetFileSecurity() to read security and ownership of files. ----------------------------- Release 0.10.4905 ----------------------------- 99-01-04 malcolmh Fixed bug 7854. We now support a list of process names that we enable MsiProvideComponentFromDescriptor for on low shell versions. To enable a process, write the process name (e.g. explorer.exe), as the "name" portion of a named value pair under HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\ResolveIOD. We use this logic: // Bug 7854. This code is a hack to work around an issue with early shell // release wherein calling IShellLink::Resolve faults in the shortcut. // This causes problems with some apps (e.g. Win98 fat16->fat32 converter // that enumerate the Start Menu, resolving each of the links). Suddenly // the user will notice all of their advertised apps being faulted in. The // hack is as follows: // // 1) Are we in the explorer's process? Allow call to proceed; otherwise // 2) Does our shell have the issue fixed? Allow call to proceed; otherwise // 3) Is the ResolveIOD policy set? Allow call to proceed; otherwise // 4) Are we in a process that really wants IShellLink::Resolve to really // resolve? This list is in the registry. If so, proceed; otherwise // 5) Return 1603. This should (hopefully) cause Darwin-unaware apps to // ignore the link. 99-01-04 malcolmh Fixed bug 8288: We now create MIF files in our SHIP build as well as in our DEBUG build. ----------------------------- Release 0.10.4901 ----------------------------- 98-12-31 cgouge Bug 8274. MsiFiler. Added support for SFN|LFN in the File table based on the summary information stream value. ----------------------------- Release 0.10.4830 ----------------------------- 98-12-29 bench fixed bugs 8147 and 8247, which dealt with allowing a user to use an unblessed source and package when the DisableBrowse policy is set. ----------------------------- Release 0.10.4825 ----------------------------- 98-12-23 bench bug 8185: we now reregister and readvertise a product during a QFE upgrade, to ensure the updating product information is registered, like the product version. ----------------------------- Release 0.10.4818 ----------------------------- 98-12-17 mattwe Bug 8212: Fixed a memory leak in SetSecureACL 98-12-17 cgouge Bug 8164. The DisableBrowse and DisablePatch system policies have been moved to HKLM from HKCU. The keys are created with a value of 0 at Darwin install and ACL for System and Admin full, everybody read. 98-12-17 bench bug 7952: when patching a feature in the run-from-source state, the feature will now be moved local instead of advertised. 98-12-17 cgouge Bug 8167. The _Sequence, _Required, and _InstallValidate tables are no longer part of the schema, and thus are no longer part of template.msi, simple,msi, etc. These tables are only used by ICEs, so they are shipped as part of the CUB file. They should generally not be included in any MSI. MsiVal.exe does use these tables, but it is not a shipping tool anymore. In order to continue validating as part of the build process, we create a temporary MSI in the TEMP directory that is a merge of the database to be validated and these three tables (from the CUB file source directory). After validing this temp file, it is deleted. 98-12-17 mattwe Added entries to the Environment table for TestDb code coverage. Also changed the ProductVersion per John Delo's request to 6.01.1234 98-12-17 mattwe Bug 8066: Took shfolder.dll 5.0.1011.2100 for alpha/x86. 98-12-17 mattwe Bug 8181: Removed default logging from instmsi. This interfered with policy logging, and the logs were always cleaned up at the end of the run. 98-12-17 mattwe Bug 8171: took new SKY instmsi.msi (inst1051.msi) 98-12-16 bench bugs 8120, 8160: added a new per-user policy called DisablePatch. if set, patches may not be applied. this is needed in secure environments as patches can change an existing install in unlimited ways. and if the existing install is managed, the changes made by the patch are run with elevated privileges. in addition to the new policy, installs that are disabled by policy now return ERROR_INSTALL_PACKAGE_REJECTED instead of ERROR_ACCESS_DENIED. 98-12-16 cgouge Bug 8180: Validation. ICE27 updated to handle DisableRollback action. 98-12-16 cgouge Bug 8166: Validation: ICE03 now reports String Overflow errors as warnings. ----------------------------- Release 0.10.4816 ----------------------------- 98-12-15 bench bug 7784: added a UI option to show the basic UI progress dialog with no modal dialogs (no error messages or files-in-use dialog). the option to msiexec.exe is /qb- and the option to MsiSetInternalUI is INSTALLUILEVEL_PROGRESSONLY. 98-12-15 cgouge Bug 8118. Validation. New ICE56, checks for a directory structure with a single root of TARGETDIR/SourceDir so that Admin installs will correctly copy all files. 98-12-15 johndelo Version bumped to 1.0 , in preparation for shipping. There should be no compatibility problems, as this is effectively the same as version 0.30. Databases can be left with their current version to maintain compatibility with older MSI versions. If the database version (Summary Property 14, Pages) is advanced to 100, then older MSI versions will not be able to open the package. 98-12-15 mattwe Bug 8142: Fixed several localized instmsi.msi files that had the incorrect summary info for their languages. 98-12-15 cgouge Bugs 8070, 8049. ICE Validation. New ICE55. Checks the LockPermissions table for bad foreign key references and null permission values. ----------------------------- Release 0.10.4815 ----------------------------- 98-12-14 mattwe Added 'ptb' (portugese brazillian) support for instmsi. We're now at 31 languages. ----------------------------- Release 0.10.4811.1 ----------------------------- 98-12-11 mattwe bug 8107: the LockPermissions table will now recognize the System, Everyone, and Administrators group (case insensitive) without the need for localization. ----------------------------- Release 0.10.4811 ----------------------------- 98-12-11 bench bug 7953: fixed problem with suspended (or ForceReboot) installs where setting a feature property like ADDDEFAULT on the command line turns on more features than the property itself defines. when this happened, the features not defined by the property weren't completely installed when resuming the suspended install (or after the reboot). 98-12-10 davidmck Fixed bug 7914 - CleanSweep could get a file between the time we got the file version size and getting the actual version block information. We now fail gracefully. 98-12-10 bench bug 8059: fixed case where a user may not be recognized as an admin if they are a member of a large number of groups. (weren't increasing buffer size if necessary for GetTokenInformation call) 98-12-10 malcolmh Fixed bug 7891: Re-advertisement is no longer allowed unless you're app deployment 98-12-10 mattwe Bug 7958: Picked up version 5.0.1011.2000 of shfolder.dll for instmsi/copymsi. There are x86 and alpha versions. 98-12-09 cgouge Bug 7931. Validation now supports [%id] syntax in the AnyPath, Path, and Paths column types. It also now accepts [$component] syntax in those same types, but only at the beginning of a path. (# and ! are accepted as well, but the usefulness of these formats is limited) ----------------------------- Release 0.10.4809 ----------------------------- 98-12-08 bench bug 7887: when installing files, we now set both the creation and modified dates to the modified date of the source file. this is to ensure the two dates are identical for any files we copy. for unversioned files, if the dates are different we never overwrite the file again. previously, the creation and modified dates where set to the creation and modified dates of the source file, which may have been different. 98-12-08 davidmck Fixed bug 7914, a problem with any file that spanned more than 2 cabinets. We were not correctly handling the MediaChange message. 98-12-08 mattwe 7929: there was a problem with environment variables being set on 9X that shouldn't have. 98-12-08 mattwe 7815: Added localization for instmsi/copymsi for the following LangIDs: 1028, 1031, 1035, 1036, 1038, 1041, 1042, 1049, 1050, 1060, 2052. The localized databases are checked into src\intl, and a perl script generates the transforms, and adds them directly into the internal databases. DEV NOTE: You must have language support for these to build copymsi/instmsi successfully, or set the IGNORELANGID environment variable to ignore unsupported languages. ----------------------------- Release 0.10.4808 ----------------------------- 98-12-07 bench bug 7906: MoveFiles action didn't move files with no attributes set (i.e. with just the NORMAL attribute). 98-12-06 cgouge Fixed bug 7896. Internal Validation supports version strings up to 65535.65535.65535.65535. 98-12-04 bench Bug 7892: fixed rollback of typelibrary registration. 98-12-04 malcolmh Bug 7890: Allow INSTALLSTATE_ADVERTISED to be passed to MsiSetFeatureState 98-12-04 malcolmh Fixed bug 7812. We don't cancel any more when the user says not to. ----------------------------- Release 0.10.4804 ----------------------------- 98-12-03 bench bug 7777: fixed ForceReboot installs for non-admins. when the RunOnce key was acl'ed to not allow delete access to the user, the RunOnce command would continue to be run at each logon. ----------------------------- Release 0.10.4803 ----------------------------- 98-12-02 malcolmh Fixed bug 7848. Eliminate warning dialog for failure to remove a reg value. 98-12-02 malcolmh Bug 7841. Fixed errors during CopyTempDatabase. 98-12-02 malcolmh Fixed bug 7693: Shouldn't base installed property off Uninstall product key. We now use the "WindowsInstaller" value. 98-12-02 davidmck Fixed bug 7858 - Problems with DBCS characters in PathType. We were incorrectly looking at the second byte and thinking it was a full path when it was a relative one. 98-12-01 bench bug 7783: made several fixes to rollback for ODBC DSN installation. 98-12-01 malcolmh Fixed bug 7829: Crash in MsiGetProductInfo ----------------------------- Release 0.10.4801 ----------------------------- 98-11-25 cgouge Bug 7763, validation: ICE35 now additionally checks for files that are marked compressed but do not have a CAB specified in the Media table. 98-11-25 davidmck Fixed bug 7813, checked in new intl resources for Fin, Rus, Slv, Hun, Hrv, Fra from RobR. 98-11-25 davidmck Fixed bug 7801, memory leak at the end of Office install due to leaking a string in SetODBCFolders. 98-11-25 cgouge Bug 7635. Validation: ICE31 now checks that if UI is authored, you have a DefaultUIFont property which refers to a valid row in the TextStyle table. 98-11-24 malcolmh Fixed bug 7774: Need to protect NT4 policies. 98-11-24 malcolmh Fixed bug 7803: Rollback does not work when trying to restore pre-existing environment variables ----------------------------- Release 0.10.4720 ----------------------------- 98-11-19 cgouge Bug 3577. Validation. Update ICE03 to check for missing _Validation entries on empty tables as well. 98-11-19 cgouge Bug 7734, validation. Updated _Validation entries to allow negative icon index values in Class, ProgId, and Shortcut tables. 98-11-19 mattwe Fixed bug 7758: When an environment variable wasn't found in the autoexec.bat file, we were adding it even if the authoring said to remove it. Fixed bug 7759: When an environment variable was supposed to do nothing during an install or uninstall we were doing the default behavior instead. 98-11-19 malcolmh Fixed bug 7760. We have a new event log message for component detection failures. 98-11-19 malcolmh Fixed bug 7756: can't see Darwin UI (installs silently) so that it looks like hang in some situation 98-11-19 bench bug 7751: custom actions are now allowed to hide the cancel button by using the INSTALLMESSAGE_COMMONDATA type in a call to MsiProcessMessage. 98-11-19 malcolmh Fixed bug 7732: x86 Custom actions of type 1 running on service side in wx86 emulation fail 98-11-19 malcolmh Fixed bug 7739: MsiReadRecordStream( ) doesn't set pchDataBuf to actual number of chars read on output 98-11-19 malcolmh Fixed bug 7728: Service runs out of memory and hangs 98-11-18 bench bug 7723: added File and Media tables to minimum.msi, as these are unfortunately required in 1.0 Darwin. 98-11-17 bench bug 7687: we will know prompt for reboot in the following situation: we attempt to uninstall a file and can neither delete the file or rename the file. this will occur for in-use files on Win9X, and in-use files on NT can usually be renamed at least. Note this is a change in behaviour from previous builds when we would prompt for reboot only when installing OVER an in-use file. ----------------------------- Release 0.10.4717 ----------------------------- 98-11-16 cgouge mergemod.dll is now built as part of every build. It is only built as part of "all" in unicode builds. 98-11-16 bench bug 7567: added DisableRollback action. see doc bug 7706 for more information. 98-11-16 cgouge Validation: Fixed bug 7675. New ICE52 that checks for non-public properties in AppSearch table. 98-11-16 cgouge Validation: Fixed bug 7676, updated sequence validation to explicitly check SetODBCFolders sequence restrictions. 98-11-13 cgouge Bug 7673. Removed MS-Specific EULA from template.msi. Also cleaned up CCPFail message. ----------------------------- Release 0.10.4713 ----------------------------- 98-11-12 mattwe Fixed bug 7622 - Commit custom actions don't work when rollback is disabled. InstMsi/CopyMsi no longer use them. 98-11-11 malcolmh Fixed bug 7627. ERROR_MORE_DATA return not correct from remoted Ansi APIs. 98-11-11 malcolmh Fixed bug 7629: Set DISABLEROLLBACK property when rollback is disabled 98-11-11 eugend fixed bug # 7505. From now on controls will create fonts using the database's code page when it comes to choose the font's character set (vs. the system's code page as returned by GetACP() that was used so far). This ensures that the information in the database will be displayed properly (provided there is language support on the machine). Exceptions to this are the Edit, DirectoryList and DirectoryCombo controls that will always use fonts in the user's default UI character set. Another exception is the Text control if it has the UsersLanguage stylebit (value = 0x100000) set - this is useful for displaying text the user entered in Edit or PathEdit controls. I've open the following DOC bugs related to this: - 7631 on the UsersLanguage stylebit - 7632 requests not to use "__UL" suffix in identifiers in TextStyle table's, TextStyle column. - 7633 requests the presence of DefaultUIProperty in packages that have UI. ----------------------------- Release 0.10.4711 ----------------------------- 98-11-10 chetanp bug 7261- On NT5, for a component with a file key path, we now register an auxiliary HKCR registry key path from the Registry table, if one exists for that component. This is to handle scenarios where a product is (user) installed by one user on a machine and then another user attempts to install the same product on the same machine. Components that have a file key path will not be implicitly reinstalled as they appear already installed. Adding the auxiliary key path will have the effect of making the component appear broken (and rightly so, since it is missing the corr. HKCR info for that user) and cause darwin to reinstall the component. 98-11-10 bench Added a new property, called "ProductState", which identifies the current state of the product, and can be used to determine if the product is advertised but not installed, or installed for a different user. the value of the property is identical to the INSTALLSTATE returned by MsiQueryProductState. see bugs 7570 and 7610 for more info. ----------------------------- Release 0.10.4710 ----------------------------- 98-11-10 johndelo Improved logic for selecting basic UI language/codepage. Before the package is opened (or it is truly neutral), when selecting a language to display to the user, we use the new API GetUserDefaultUILanguage when available (which is set under NT5 locale panel: Dialogs and Menus). The property, PackageLanguage, which normally must match the SummaryInformation language (Template property, 7), is ultimately used to select the language for dialog text and buttons loaded from the resources in MSI.DLL, and could be changed by externally applied transforms. Fonts are selected based on the codepage of the text data. Database strings use the codepage of the database strings. Resource strings use the default codepage for their language. List/comboboxes use the system codepage on Win9X, or the codepage of the user language on NT. As always, it is imperative that the codepage of MSI or MST be set properly. If all the strings in the database are ASCII text, then the codepage should be 0, to allow using font better for user data. 98-11-08 cgouge Fixed Bug 7501. We now set the "TerminalServer" property if Windows Terminal Server is detected. Otherwise the property is undefined. ----------------------------- Release 0.10.4706 ----------------------------- 98-11-05 chetanp bug 7559 - fix ixoComponentRegister operation's rollback which was broken for components registered run from source (both file and registry key path components). ----------------------------- Release 0.10.4704.1 ----------------------------- 98-11-05 davidmck Fixed bug 7460. For the Wx86 registry keys we were not handling the AddRef and Release code correctly. Needed to add the four cases to those functions. 98-11-04 cgouge Fixed Bug 7491, MsiProcessMessage fields getting reset during first progress message call. The two cases where the records were modified now use their own private records instead of the user record. 98-11-04 bench bug 7532: fixed bug that prevented using MoveFiles to rename a file without moving from one directory to another. ----------------------------- Release 0.10.4704 ----------------------------- 98-11-03 bench bugs 7195 and 7492: fixed unformatted event log messages (%temp%\msievent.log on Win9X) written by ship Darwin. 98-11-03 mattwe bug 7467: We now acquire the SE_RESTORE_NAME privilege to set the owner on files. This sometimes ends up up with replacing a file, and the file is still marked as being owned by the initial person to install the file. However, we cannot let someone own a file that we had to elevate to write to. 98-11-03 bench bug 7425: we now flush the rollback script with each rollback opcode to ensure the script contains all information necessary to completely rollback system changes. previously, the rollback script would be missing the last opcodes in case of a machine crash, and not all changes could be rolled back. ----------------------------- Release 0.10.4703 ----------------------------- 98-11-02 bench bug 7466: when patching an admin image, we now update the summary information of the admin package as well as persisting transforms to the database. the summary information properties that are updates are the PackageCode, Comments and Subject. the values used to update these properties are read from the PATCHNEWPACKAGECODE, PATCHNEWSUMMARYSUBJECT and PATCHNEWSUMMARYCOMMENTS properties, which are added by the patch-only ('#') transforms of the patch package. 98-11-02 cgouge Bug 7462. Logging enabled in verbose mode for Wx86 emulation mode on Alpha. 98-11-02 bench Bug 7458: cancelling install during binary patching would leave behind temp files and could also lead to an AV. fixed by allowing patching thread to finish before attempting cleanup or releasing memory used by thread when the user cancels midway through a patch. 98-11-02 malcolmh Fixed bug 7489. Increased the ship timeout to 30 minutes. 98-11-02 malcolmh Fixed bug 7424: Dariwn should better handle corrupt packages. 98-10-30 davidmck Fixed Bug 7488, we were enumerating drives twice in some cases because we needed an ELSE in EnumDriveTypes. 98-10-30 tracyf Bug 7431: when prompting the user for a CD, we now wait up to 10 seconds before complaining that we can't find the disk, to give the CD a chance to spin up. ----------------------------- Release 0.10.4630 ----------------------------- 98-10-29 cgouge Bug 7013, Validation. New ICE50, checks Icon.Name to ensure that advertised shortcuts using the icon will have correct context menus and will display the icon. 98-10-29 bench Bug 7419: fixed timeouts during patch application 98-10-29 mattwe Bug #7380: shfolder.dll is now installed on all platforms, not just 9X. Added alpha version to %darwin%/tools/bin/alpha 98-10-29 mattwe Bug #7387: removing registry values for the name "*" now properly work when there is a value. (Does not delete the whole key unless the value is *blank*) 98-10-28 cgouge Bug 7447 - Validation, ICE 51. Checks fonts for titles. TTC/TTF fonts should not have them, everything else should. ----------------------------- Release 0.10.4628.1 ----------------------------- 98-10-28 bench bug 7453: when determining source type we would sometimes use the name of the cached msi when looking for the sourc msi. bug introduced in 4628 and fixed in 4628.1. ----------------------------- Release 0.10.4628 ----------------------------- 98-10-28 chetanp bug 7317 - As a result of fixing darwin bug 7317 the Extension.ShellNew and Extension.ShellNewValue columns have been removed. We now no longer write these keys from the Extension table. Instead, it is expected that the author author this information in the Registry table. These changes have warranted a schema change and we are now at schema 30. However we are still compatible with the older databases (>= 26) and the behaviour is unchanged for the older databases (i.e. we use the Extension.ShellNew and Extension.ShellNewValue columns at advertisement). 98-10-27 chetanp bug 7372 - added support to generate the FontTitle for a TTC file, if not provided in the Font.FontTitle column. 98-10-27 chetanp bug 7383 - we now set the %windir%\ttfcache file for deletion pending reboot, in case we install a ttc font file to a win9x machine. 98-10-27 chetanp bug 7388 - we now have a new MsiProvideQualifiedComponentEx API that takes an extra szProduct arg. When this arg. is specified we search for a qualified component published by that product , else we fail (NOTE: we do not fall back to using another Darwin Descriptor). If szProduct is null we work the same as MsiProvideQualifiedComponent. 98-10-27 johndelo ----Transform viewer implemented internally in Msi.dll---- To invoke transform view mode, open the reference database normally, then use the flag MSITRANSFORM_ERROR_VIEWTRANSFORM in MsiDatabaseApplyTransform. This flag then stops the transform from being applied to the database, and instead dumps the contents into a read-only temporary table, _TransformView. This table can then be accessed with normal SQL queries, and is never persisted. Table is held in memory by a lock count, that can be released with a SQL command "ALTER TABLE _TransformView FREE". The table is not cleared when new transforms are applied resulting in successive application of the transforms. Release the table to view transforms separately. ---SCHEMA FOR _TransformView TABLE--- Table CHAR, PK name of altered table Column CHAR, PK name of column, or: INSERT, DELETE, CREATE, or DROP Row CHAR, PK row: primary key values, tab separated, NULL if schema change Data CHAR data (name of stream if stream data), or column definition Current CHAR current value from reference database, or column number Therefore the various transform operations are indicated as below: ---DML ops--- Modify data: {table} {column} {row} {data} {current value} Insert row: {table} "INSERT" {row} NULL NULL Delete row: {table} "DELETE" {row} NULL NULL ---DDL ops--- Add column: {table} {column} NULL {defn} {column number} Add table: {table} "CREATE" NULL NULL NULL Drop table: {table} "DROP" NULL NULL NULL To form the row ID, the primary key values are concatenated, tab separated. Null primary key values are represented by a single space character. Scripts have been checked in to call the APIs and view the result table, and are available as well in \\dartools\distrib\Viewers. WshTranV.vbs - VBScript for Windows Scripting Host - CScript.EXE TranView.vbs - VBScript to be run with RunScrpt.EXE (Darwin NT-only tool) The latter script also has a Diff function for comparing databases. Use ? or Help on the command line for the command syntax. 98-10-27 johndelo Bug 7399. We now attempt to find a SansSerif font when the package is not in the system codepage, avoiding the ugly Serif fonts that were seen. 98-10-27 cgouge Bug 7081. Validation. New ICE48, checks for "hardcoded" directories, that is, directories that are also keys in the Property table. Provides a warning for each case. 98-10-27 cgouge Bug 7401. Validation. ICE49 checks for default reg entries (no name) that are not REG_SZ. (for Win95). 98-10-27 cgouge Bug 7430. Validation support for new Admin image flag in SummaryInfo stream. ICE39 now gives a warning if this bit is set. 98-10-27 bench bug 7015: fixed post-admin installs from packages with files marked "compressed" in the File.Attributes column. admin images are fully uncompressed, even for files marked compressed. this is to allow patches to update any files in an admin image. as a result, we now ignore the compressed bit when installing from an admin image. to designate a package as being in an admin image, a new bit was added to the "source type" summary info property. the possible values are now 0-5, where 4 is admin with LFN and 5 is admin with SFN. 98-10-27 davidmck Fixed bug 7418, needed to handle the ifiAccessDenied return from GetAllFileVersionInfo. 98-10-27 malcolmh Fixed bug 7410: reinstallmode /V doesn't work when the package code changes 98-10-27 malcolmh Fixed bug 7398: "TransformsSecure" policy set causes MsiAdvertiseScript to register garbage transform list. ----------------------------- Release 0.10.4627 ----------------------------- 98-10-27 cgouge Bug 6555. Validation, new ICE 46. Checks definition/usage of properties for differences in case, flagging potential mistakes with a warning. 98-10-26 malcolmh Fixed bug 7122. changing package codes for the same product are now rejected unless you specify /fv 98-10-26 mattwe Bug 7354: Re-arranged supported platform list in instmsi/copymsi to work-around alpha only bug #7422 98-10-26 mattwe Bug 7404: Instmsi/CopyMsi now put explicit accellerators on install/uninstall/apply verbs. With the explicit '&' the first letter works, but it isn't underlined in the UI. 98-10-26 bench bug 7338: added a new bit to the File.Attributes field that designates a file as coming from a patch package. the new bit is necessary to mark files that are always compressed. formerly these files were marked with the "compressed" bit, but this bit will be ignored when installing from an admin image. 98-10-26 mattwe Fixed bug 7335 (reactivated for the system agent) We can now tell the difference between when the system agent is stopped, versus when it is paused. 98-10-26 malcolmh Fixed bug 3794. DISABLEMEDIA is now set only when the summary source bit is set to compressed. 98-10-23 tracyf Per bug 7216, components can be flagged with the new "Transitive" attribute bit (value: 64). If this bit is set, then at reinstall time, if the component was previously disabled but is now enabled, it will be installed. If it was previously enabled, but is now disabled, it will be removed. The primary motivation for this bit is to allow applications to be upgraded when the OS is upgraded, by simply running a reinstall of the product. Note that, for "transitive" components that are being removed on reinstall, the Permanent bit is ignored. Even if the component has other products as clients it will still be removed (with the implicit understanding that the author has conditioned another OS-specific component to be installed in its place on upgrade). 98-10-23 mattwe Fixed bug 7365: InstMsi/CopyMsi no longer write the Install To Network verbs. ----------------------------- Release 0.10.4623 ----------------------------- 98-10-22 davidmck Fixed bug 7258 by increasing our default timeout in Ship to 5 minutes. 98-10-22 mattwe Bug 7335: The screen saver and system agent now save their initial states at the beginning of the execute mode, turn off for the duration of the install, and then restore at the end of execute mode. Exception: If the screen saver or the system agent were off at the beginning of the install, and then are turned on by the user during the install, we won't turn them back off. 98-10-22 bench Bug 7376: when rolling back and restoring a file when the new file was in use, we would replace the new file, but leave a reboot operation to delete the file. for Office 2000, this occurs when system files are replaced and an error occurs after the mid-install reboot. rollback occurs and upon the next reboot the system files are missing. the fix was to avoid doing a Remove then Replace when copying a backup file over a new file during rollback. we now just do the replace. 98-10-22 mattwe Bug 6121: copymsi/instmsi, during an administrator user's installation, now waits for the service in the temp directory to stop before exiting. This allows IExpress to fully clean up. ----------------------------- Release 0.10.4621 ----------------------------- 98-10-20 malcolmh Fixed bug 7309: TransformSecure fails when passed as property; 2 asserts Access Violation and locks the MsiServer 98-10-20 bench bug 7209: fix a problem causing file to not be updated when patching an admin image. 98-10-20 mattwe Bug 7088: backed out initial fix for 7088, and implemented by adding new script type: istAdminInstall. Same behavior as previous fix. 98-10-20 bench bug 7362: removed all unnecessary "uncompressed" bits from File tables of released packages. 98-10-20 bench bug 7310: admin packages were not being restored by rollback after a failed admin patch. they are now. 98-10-19 johndelo Bug 7277: Transform streams not marked as system. Database table stream are flagged as system to keep their namespace distinct from user streams such as cabinets and binary streams. Transform table streams have been changed to match the names of the corresponding database table streams. Temporary compatibility is present to recognize streams generated with older builds of MSI. However, transforms generated with this build will not be useable on older builds, unless either the databases had uncompressed stream names, or the _MSI_TEST environment variable has the "z" option set. 98-10-19 cgouge Bug 6444, part 2. New ICE39, checks Summary Information Stream for various 'bad things', such as bad GUID, bad Template format, etc. This ICE is *NOT* available through the web page, because ICEMAN does not support Summary Info validation (coming in the future.) You must have the new Evalcom (see below) for this ICE to work via MsiVal2, etc. It will fail gracefully if you do not. 98-10-19 mattwe Fixed bug 7088: Added a field to ixoHeader to indicate the mode in which it was generated. (see msiauto.hlp) We no longer register folders that are created during an admin install. When we do register folders, a failure will now be logged and ignored. 98-10-19 cgouge Bug 6444, part 1. In order to support SummaryInfo validation, the validation startup routines in the EvalCom COM server have been changed. This COM server is used by MsiVal2 to do validaiton. The new system takes advantage of the changes to MsiDatabaseMerge (Bug 7124) to generate better error messages in certain failure cases. The new system creates the MSI engine from the CUB file instead of from the merged database. This change means that CUB files must now have an empty property table in them to avoid asserts in the DEBUG versions of Darwin. If you are using an older CUB file with DEBUG Darwin, you will get asserts in engine.cpp. Evalcom is also OS-independent now, the same bits will work on ANSI and UNICODE. 98-10-16 cgouge Bug 7139. Validation: Updated internal validation for Component.KeyPath entries that are keys into the ODBCDataSource table. 98-10-16 cgouge Fixed bugs 7137, 7140, 7141. Updated _Vaidation entries for TextStyle.StyleBits, Shortcut.ShowCmd, ServiceInstall.StartType. 98-10-16 mattwe Fixed bug #7282: On rollback, registry keys will be explicitly created by the RegCreateKey operation unless they had an AddValue operation. This allows the security settings to be reapplied. ----------------------------- Release 0.10.4616 ----------------------------- 98-10-15 cgouge Validation: Bugs 6724 and 7129, part deux. ICE33 updated to no longer throw warnings when the registry table is used to generate registry entries for Insertable, NotInsertable. 98-10-15 tracyf Fixed bug 7010 - on Win9x, if the CRC check fails (for files in the File table that have the HasChecksum bit set), we now ignore this check if the file is in use. This is because a Win9x bug prevents the checksum from being calculated properly if the file is loaded in memory. 98-10-15 malcolmh Fixed bug 7269: Files-in-use dialog sometimes missing description. 98-10-15 malcolmh Fixed bug 7271. Source registration now works when DISABLEMEDIA is set. 98-10-15 malcolmh Fixed bug 7279. Fixed Session.FeatureInfo automation and typelib entry. ----------------------------- Release 0.10.4614 ----------------------------- 98-10-13 chetanp bugs 6724 and 7129 - removed the Class.RemoteName, Class.Insertable and ProgId.Insertable columns. The Class.RemoteName column was never used. The Class.Insertable and ProgId.Insertable columns were used to advertise the OLE Insertable keys. We now no longer write these keys from these advertise tables. Instead, it is expected that the author authors this information from the Registry table. This has warranted a schema change and we are now at schema 29. However we are still compatible with the older databases (upto and including 26) and the behaviour is unchanged for the older databases (ie we use the Insertable columns at advt.). 98-10-13 chetanp bug 7263 - ensure product code is all upper case at the beginning of the installation. 98-10-13 mattwe Fixed bug 7174: We now disable the screen saver during the execute section, the re-enable it. (Performance.) 98-10-13 mattwe Fixed bug 7427: When restoring registry keys during rollback with non-default security, we first create the key with no security, then elevate and apply the security. 98-10-12 mattwe Fixed bug 7227. Releasing global data so service 98-10-13 malcolmh Fixed bug 7232. Fix custom action IDL to correctly identify "out" string parameter sizes. 98-10-13 chetanp bug 7207 - feature's transition between the advertise and the absent states should not affect the component's state. can be stopped. (introduced by bug 6922) 98-10-12 malcolmh Fixed bug 7235. We now correctly restore folder security descriptors on rollback. ----------------------------- Release 0.10.4609 ----------------------------- 98-10-08 bench bug 7193: fixed logging when triggered by the policy value. previously we would keep overwriting a single log in each install invoked by a process, so that only the last install from the process was logged. we now generate a new log for each install. in the course of fixing this bug, new information was added to the beginning of each verbose log: the date and time, the type of Darwin build (ship/debug, ansi/unicode), the Darwin build #, and the calling process. 98-10-08 chetanp bug 6961 - we now skip the conversion of the file path to a short file path for InProcServers from the Class table (so in effect only LocalServers are forced to Short Paths). 98-10-08 chetanp bug 7201 - fix registration of features containing components w/o component ids. 98-10-08 chetanp fixed bug 7020. We now allow > 200 components per feature. 98-10-08 cgouge Bug 7124. MisDatabaseMerge now returns ERROR_DATATYPE_MISMATCH when one or more tables in the database have schema conflicts. It now does the schema checks before merging any of the tables, so you won't get half a merge anymore. 98-10-08 mattwe Bugs 6981, 7118: During rollback we now elevate and set SeRestorePrivilege for writing security descriptors. 98-10-09 johndelo Bug 7186: Failure to open streams on Win98J with user language set to English. Problem is that JPN maps DBCS characters into the private use area of Unicode that we were using for stream names. That alone is not so bad, but when the user Language is set to English, then the stream name processing gets messed up as the DBCS chars are individually uppercased, causing failures. Simple fix was to use a Unicode block unprocessed by any codepage. However, databases produced with builds 4522 and later will not be readable with this build. Either export the tables with the old MSI version and reimport them with the current build, or use the tool 4524Fix.exe, checked into Darwin project, and also available on \\JDELO3\public\tools. MsiInfo.exe and DBView.exe have been updated for the new stream name offset. Build 4524 has been rebuilt with this fix -> now 4524.6 Transforms are affected as well, and the tool will update them. ----------------------------- Release 0.10.4607 ----------------------------- 98-10-06 cgouge Bug 6931: Validation aspect of Truetype fonts always being reinstalled. Rows in the file table are now allowed to have a null language value iff a row in the font table references the file. 98-10-06 mattwe Bug 7001: GetRelativeSourcePath now accepts / or \ at the end of a path... Adds support for URLs. 98-10-06 cgouge Bug 7110: Internal field validation. Cabinet data type now accepts only SFN instead of short|long syntax. 98-10-06 mattwe Bug 6661: Checked in new versions of wextract.exe, iexpress.exe, and makecab.exe to fix DBCS bugs in their extraction for instmsi/copymsi. 98-10-05 cgouge Bug 7126: Validation: ICE20 no longer checks for the DiskCost dialog. 98-10-05 cgouge Bug 7117: Validation: ICE19 changed so that non-advertised shortcuts are exempt from the Component-Id/KeyPath checks. 98-10-05 cgouge Bug 7098. Validation: ICE45 checks unused bits in a bunch of tables' bitfields to make sure they are 0. (Related to Bug 7078) TestDb was updated to pass this new ICE, since we had a few random bits set in the BBControl table. 98-10-02 malcolmh Fixed bug 6943: We now use the cached database during database copy, *except* for nested installs which continue to copy the source database. 98-10-02 malcolmh fixed bug 6922. we now register ODBC data source component key paths correctly. 98-10-02 bench bug 7096: we now disable the Cancel button during cleanup of rollback files. 98-10-02 cgouge Bug 6606. MsiInfo now reports an error if you have chars > 0x7F in your database but don't have a codepage set, and will also report an error if you have any DBCS strings that are corrupted because you forced the codepage after the data was already in the database. 98-10-01 bench bug 7015: a change to admin installs when certain files in the File table are marked with the "compressed" attribute bit. any cabinets containing files files are copied to the admin install, so that post-admin installs will correctly find the compressed files (since they are marked compressed, they are assumed to be compressed regardless of the global "source type"). also, embedded cabinets containing these types of files are not dropped from the package when it is copied to the admin image. 98-10-01 malcolmh Fixed bug 7089: Darwin occasionally generates script with bad packagename value 98-10-01 cgouge Bug 6888. Field validation for filenames updated to treat '*' charaters as 0 or more chars instead of 2 or more. 98-10-01 bench bug 6960: when rebooting on Win9X, we would leave behind the .msi file in the %temp% folder. this was caused by attempting to delete the temp msi after calling ExitWindowsEx. on Win9X, there is not enough time to do this before the system shuts down. the fix was to reboot after deleting the temp msi. 98-10-01 cgouge Fixed Bug 7041. msidb fixed to work with the new stream and storage APIs. It now correctly handles both compressed and uncompressed stream names. The new system allows streams and storages to have the same names (because the stream name is actually compressed), so the -k and -x actions had to be split. -k and -x work with streams, wheras -j and -w remove and extract storages. 98-10-01 malcolmh Fixed bug 7059: Custom action server needs to initialize the allocator ----------------------------- Release 0.10.4530 ----------------------------- 98-09-28 cgouge Bug 7040. ICE44. Checks that ConttrolEvents involving dialogs (NewDialog, SpawnDialog, SpawnWaitDialog), have arguments that are valid foreign keys into the Dialog table. 98-09-28 cgouge Bug 6846, validation. ICE43 checks that non-advertisable shortcuts are in components that use HKCU reg entries as keypaths. This prevents the case where multiple users on a machine run the install and only the first user gets the shortcuts. 98-09-28 chetanp undid bug 4265 fix. We now (again) suport database versions 26 upwards. 98-09-28 malcolmh Fixed bug 7051: MsiGetActiveDatabase returns wrong error. 98-09-28 malcolmh Fixed bug 7037. We now set the Privileged property correctly on Win9X and when the user is an Admin. 98-09-28 malcolmh Fixed bug 6943. We now used the cached database during RegisterProduct. 98-09-28 malcolmh Fixed bug 6553. We now elevate self-reg correctly when the AlwaysInstallElevated policy is set. 98-09-25 cgouge Bug 7022, Validation. Removed restriction that InstallFiles must come before RemoveShortcuts. 98-09-25 malcolmh Fixed bug 6962. We wouldn't reboot non-managed apps when the UI level was Basic or None. We now do. 98-09-25 bench Bug 6987: the ARPNOMODIFY property, when set, will cause the UninstallString written to the Uninstall key (and used by downlevel ARPs) to contain the command line to uninstall, rather than configure. This can be used by packages without UI to uninstall through the Add/Remove Control Panel. Previously, the Uninstall string was always to configure, which was useless for packages without UI. NOTE: this new behaviour is only applicable on NT4 and Win9X, as the NT5 ARP doesn't use the Uninstall string. NOTE2: as always, the ARPNOREMOVE property causes no UninstallString to be written at all, and the package will not show up in the ARP. 98-09-24 cgouge Bug 6010. Validation. ICE29 modified to accept new 62 character stream name limitation from 6539. 98-09-24 chetanp bug 7014 - decoupled darwin cnfg. information registry location from the HKEY passed in to MsiAdvertiseScript. We now always autonomously decide on where the darwin cnfg. info should go. Also we now classify the PublishComponent stuff as SCRIPTFLAGS_CNFGINFO rather than SCRIPTFLAGS_APPINFO. 98-09-24 mattwe Fixed bug 7009: installing files with lock permissions works again. ----------------------------- Release 0.10.4522 ----------------------------- 98-09-22 johndelo Localized resources updated in MSI.DLL from \\RobR\msires New languages: French, Dutch, Finnish, and Hungarian. Updated all others: DEU,ARA,CHS,CHT,JPN,KOR,THA,GRK. 98-09-22 johndelo Bug 6539 - Broken OLE32.DLL supplied with IE 4.01 SP1, Win98 The bad DLL version is now detected at load time, and a workaround is enabled that corrects the faulty code. Compressed stream naming is now re-enabled, and the _MSI_TEST 'Z' now disables the name compression (temporarily). For a short period of time, the uncompressed/unqualified stream names can be forced with open flags. For complete details, see the notes below from 98-08-18. NOTE: You cannot directly add streams to an MSI file. You must use the _Streams pseudo-table and the APIs. 98-09-21 chetanp fixed bug 6804 - we now remember the flags passed in to MsiAdvertiseScript so that we know if shortcuts and OLE and Qualified Components info had been created for the app. If not create we create the same during the first run of the app. 98-09-21 chetanp fixed bug 6435 - in order to ensure that darwin cnfg. data for user assigned apps is secure, we have shifted the location of the info from HKCU\S\C\Installer to HKLM\S\M\W\CurrentVersion\Installer\Managed\\Installer. Also we replicate all info for assigned apps in the non-assigned location as well (HKCU\S\Microsoft\Installer), in order to support roaming (albeit the app working as unassigned). 98-09-18 mattwe Fixed bug 6340 related to IE3. WININET functions are in the DLL shipped in IE3, but return call not implemented. I've done scaled down versions of these, that are called only when not available in WININET. 98-09-18 mattwe Fixed bug 6935: Internet downloads were unable to be brought up in maintenance mode to a source list bug. 98-09-17 malcolmh Fixed bug 6918: Handle network error during database copy. 98-09-17 malcolmh Fixed bugs: 6402 SECURITY: Non-managed app can run elevated during class activation. We now maintain ACL's on destination files during Filecopy (unless LockPermissions specifies an ACL for the file). 6813: Maintenance mode after domain change keeps looking for source even after you cancel. 98-09-17 bench Bug 6910: we now write UpgradeCode information during advertisement as well as installation. Two new opcodes were added to accomplish this: ixoUpgradeCodePublish and ixoUpgradeCodeUnpublish. 98-09-16 malcolmh Fixed bug 6847: MsiEnumComponentQualifiers misses per-user data 98-09-16 malcolmh Fixed bug 6895: Text in basic UI changes to bold. We now set the message context language to the package's base language very early in the install. 98-09-16 bench Bug 6624: fixed a crash when changing a key name in a record containing a stream. When changing the key value to a large string, the stream name computed may become larger than 32 characters, which is not supported by OLE. we were not handling this error gracefully. 98-09-16 mattwe Fixed bug 6907: cleared a dirty record that was being re-used by RegAddvalue. 98-09-16 mattwe Fixed bug 6872: You can now stop the service after an uninstall. DEVELOPER NOTE: If you allocate a global object that holds on to a services object, it must be released by the time the last FreeServices() call is made for that install. ----------------------------- Release 0.10.4516 ----------------------------- 98-09-15 cgouge Fixed Bug 6613. Validation. Fixed ICE38 to handle non-root flagged root profile directories. Also fixed AppDataFolder check. No longer goes into an infinite loop due to the new ICE33. 98-09-15 cgouge Bug 6152. Validation: New ICE33. Checks the registry table and finds registry entries that collide with (or should be generated through) the Class, Extension, ProgID, MIME, etc. tables. The information on what is a "bad" registry entry is encoded in the _BadRegData table which is provided with the CUB file. 98-09-15 bench Bug 6852: we now catch duplicate window titles in the basic UI FilesInUse dialog. the main purpose of this is to prevent the same process from being listed multiple times. 98-09-15 tracyf Bug 6834: the SelectionTree menu choices have been re-ordered slightly, separators have been added, and the drop-down menu itself is now drawn with a nice gray background. 98-09-14 bench Bug 6841: improved Files-In-Use logging, and fixed bug that prevented FIU logging on NT (when the server was registered) 98-09-14 malcolmh Fixed bug 6884: Darwin fails with C0000005 ACCESS_VIOLATION when passed long bogus MST path 98-09-14 cgouge Validation: Bug 6729. Added ICE42 which checks the Class table for EXE files listed as InProc components. Also checks non-LocalServer classes for DefInProcHandler and Argument values. 98-09-14 malcolmh Fixed bugs: 6813 Maintenance mode after domain change keeps looking for source even after you cancel 6854 "Error 2610. Launch condition failed: [ProductNameNonQualified] setup needs to replace some Windows system components" when starting drag and drop install with non-admin user privilege 98-09-14 bench Bug 6855: fixed assert when installing over existing ODBC info when rollback not enabled. 98-09-14 mattwe Fixed bug 6845: Service errors (start/stop/delete/ install) are now non-fatal during rollback. The default response for no-UI is now to ignore them. ----------------------------- Release 0.10.4511.1 ----------------------------- 98-09-11 malcolmh Fixed bugs: Fixed DLL custom actions so that they aren't always async: 6106 Default CD key invalid on NT5 O9 install 6865 Error 2707: Target Paths Not Created for opcd0 in Directory Table 6873 validation: can't specify specific ICE's to run on command line for msival2 Allowed column 32 to be created if it's temporary: 6866 Transforms: Creating the 32nd MarkingColumns for Transforms and merges of 31col tables triggers assert Temporarily hacked around an instance-count problem. Real fix will be done at some point: 6872 Msiexec /unreg failed after install/remove testdb. Added descriptsions for IMsiCustomAction and IMsiRemoteAPI 6860 AF in module.h running regmsi ----------------------------- Release 0.10.4511 ----------------------------- 98-09-10 mattwe Progress on bug 6363: We've added code for instmsi/ copymsi to use the appropriate transform for languages. All that's needed is to add the transforms as they come from the localizers. 98-09-10 cgouge Fixed bug 3729, Validation: added to ICE40 check for RemoveIniFile.Value null when action is 4 (Remove Tag) 98-09-10 malcolmh Fixed bug 6833: Elevated state bit not persisted for use on uninstall/maintenance mode 98-09-10 cgouge Validation: Bug 6590, New ICE41. Validates that Class and Extension table reference components that are associated with the referenced Features. 98-09-10 malcolmh Fixed bug 6362: darwin hangs during execution with logging enabled 98-09-10 malcolmh Fixed bug 6791: Assertion failed in database.cpp:Line 3761 when running Tranform tests.. *We now restrict tables to 31 columns* 98-09-10 chetanp bug 6801 - fix MsiViewModify with Refresh failure on stream objects 98-09-10 mattwe Fixed bugs 6678, 6716: We've trashed the custom action in instmsi/copymsi that registered verbs. We're going to have to use transforms for the rest of the strings, so we might as well transform these as well. The bugs deal with the format and content of the verbs, which are now standardized. 98-09-10 malcolmh Fixed bug 6495: AD: Potential security hole in Darwin's custom action handling. We now run DLL custom actions for non-managed apps in a separate process. 98-09-10 bench Bug 6340: fixed URL download installs on platforms where cached files have different names than the original files from the http: or ftp: server. We were not using the new name in the cache which caused "source file not found" errors. 98-09-10 malcolmh Fixed bug 6674: Transform: GenerateTransform asserts on db with 32-Column tables. We error if you have > 31 columns in your table. 98-09-09 bench bug 6628: the typelib in msi.dll now references the new html help file msi.chm instead of the old msi.hlp. 98-09-09 davidmck Changed ODBC errors from debug to ship. Removing a driver is now ignorable and can be retried. 98-09-09 mattwe Fixed bug 5469: Actually, I'm just the last one in the chain. Ship errors should now be finalized. 98-09-09 mattwe Fixed bug 5243: EditFlags for NT5 should be binary, instead of DWORD for instmsi/copymsi 98-09-09 mattwe Fixed bug 5402: Instmsi/Copymsi will not install on NT versions less than 4.0 98-09-09 mattwe Fixed bug 6630: Services feature will no longer be available in TestDb without being a Privileged install. (You must be either an admin, or have all apps elevated, or have testdb assigned) ----------------------------- Release 0.10.4509 ----------------------------- 98-09-08 cgouge Fixed bug 6765, added internal validation for the [!filekey] sequence. 98-09-08 mattwe Bug 6722: two problems fixed. AppId table for RunAsInteractiveUser and ActivateAtStorage should work as described. 98-09-08 bench Bug 6786: when a user runs an install while another install (run by a different user) is suspended, the logged on user recieves a warning and is allowed to continue, but the suspended install is not rolled back. Previously, we would attempt to rollback the suspended install, but this could lead to rolling back items in the current users profile erroneously. A better fix for this problem will be attempted in version 1.1. 98-09-08 bench Bug 6090: when a user runs an install with the ForceReboot action and reboots, the following occurs when a second user logs in after the reboot. If the original install was per-machine, the second user is allowed to continue the install. If the install was per-user, the user is issued a warning and the install is terminated (but the information about the suspended install remains in the registry). 98-09-08 cgouge Validation: Bugs 6648, 6705. New ICE 40, performs miscellaneous little checks that don't really belong anywhere else. Right now this is just looking for a missing error table and setting the REINSTALLMODE property. Both are just warnings. 98-09-04 cgouge Bug 6790, Validation: ICE27 updated to handle new AllocateRegistrySpace action. 98-09-04 davidmck Fixed bug 6799. Another issue with script optimizations. ODBC actions zeroed out the opcode. 98-09-03 davidmck Fixed bug 6682. We still had some issues with multiple threads adding strings to the string pool of the database. This should clear them all up. 98-09-03 chetanp bug 5429 - added support for [!filekey] syntax (Short File Path) for IniFile.Value column as well. 98-09-03 chetanp bug 6692 - honour SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST in MsiAdvertiseScript for unadvt. as well. 98-09-03 chetanp bug 6567 - remove AppId info advt. 98-09-03 bench Fixed bug 6694: crash when attempting to install from ftp: server. 98-09-03 tracyf In response to bug 4755, the 'f' logmode flag has been removed. Logging of file-in-use information is now included as part of the 'i' flag. ----------------------------- Release 0.10.4503 ----------------------------- 98-09-03 johndelo bug 5567, and other language/resource basic UI bugs We now use the database language and codepage to obtain and display resource strings. Because we do not set the language soon enough, if the language of the user does not match the system, there is currently a delay until the correct language appears (postponed bug). All non-handler dialogs and message boxes use common code that is language and charset aware, but there are some cosmetic issues that will be cleaned up shortly. All dialogs now use the common caption, which is initialized with "Windows installer", but gets changed later. The caption resource strings are gone, Yes and No added. 98-09-03 chetanp bug 6043 - added AVAILABLEFREEREG property to allow author to specify the free registry space in KB required by the app. This property is acted upon by the new AllocateRegistrySpace action. 98-09-03 chetanp bug 6463 - added new DISABLEADVTSHORTCUTS property to disable the advertisng/ creation of Darwin shortcuts even on machines that support darwinised shortcuts. Regular shortcuts are created inplace. 98-09-02 chetanp bug 6671 - moved WM_FONTCHANGE message posting to execute to be once per install. 98-09-02 chetanp fixed bug 5429 - added support to write short file names for long file name paths via the Registry.Value column. The syntax for this is [!FileKey]. This evaluates to corr. Short File Names only when used in the Registry.Value column. When used in other places this syntax is treated the same as the regular [#FileKey]. 98-09-02 cgouge Validation: Bug 6613, New ICE 38. ICE38 Checks components that will be installed to the user profile and verifies that they use a registry key under HKCU as the KeyPath. It verifies that the key exists, is under HKCU, and belongs to the referring component. 98-09-02 bench Fixed bug 6336: Applying a patch when the RemoveOldProducts action occurred before the main actions for the new product, a "source not found" error occurred. The fix was to save the old source list before uninstalling the old product so the source list could be used for the new product. 98-09-02 bench Fixed bug 6493: when a DLL custom action failed, we erroneously put up an error message stating an exe custom action failed. We now only display this error only for EXE custom actions. 98-09-02 bench Fixed bug 6507: when opening an existing suminfo stream (either through automation or the MsiGetSummaryInformation api) for write (passing property count > 0) and calling persist before writing any properties, the existing properties are deleted. The fix was to write out the existing properties when persisting even if no properties were added or deleted. 98-09-02 mattwe Fixed bug 6722 - AppId.ActivateAtStorage and AppId.RunAsInteractiveUser were busted such that you couldn't successfully create a false value. Now, nulling the column or using 0 as the value evaluate as false. Any other value is considered true. 98-09-02 mattwe Fixed bug 6725 - x86 instmsi/copymsi will not install on ALPHA machines, even when x86 is emulated. You can still copy the bits by hand, if you *really* want to, and run /regserver. 98-09-02 davidmck Fixed bug 6605 - Script performance work. We compress Unicode strings to SBCS strings when possible in the script. We also compare a record being written to the script with the previous record being written and any parameters that are identical are flagged and not actually written to the script. This means that all scripts created with this version of Darwin are incompatible with previous versions. Previous scripts are still compatible with this version of darwin. 98-09-01 bench Bug 6446: when installing over in-use files, we now attempt to rename the file (which works on NT) and install the new file in the correct spot, rather than installing the new file to a temp spot and scheduling a rename. This gives files a better chance to be in the correct spot immediately, even if the existing files are in use. The in-use files that are moved out of the way have names starting with "TBD" (to-be-deleted). NOTE: this normally happens automatically when rollback is enabled. This fix made for this bug ensures consistent behaviour when rollback is not enabled. 98-09-01 mattwe Bug 6678: Removed the "Open" verb from Msi.Patch and Msi.Package. 98-09-01 mattwe Bug 6594: Platform launch conditions for UNICODE/ANSI on Win9X and NT are now all handled by msiinst.exe 98-09-01 bench Bug 5132: Darwin now allows non-admin users to replace or delete files on reboot (on NT). MoveFileEx requires admin rights to call, since the reg key being written to is by default read-only for non-admins. To allow non-admin users to perform this action, Darwin uses its elevated privileges when calling MoveFileEx, but first verifies the user actually has permission to do the rename/delete. NOTE: prior to this fix, we were always elevating before calling MoveFileEx without making the proper access checks. 98-09-01 bench Bug 6181: when attempting to remove an acl'ed file, we now display an error with the appropriate buttons. if we failed to remove a file because it was in-use, we don't display an error but rather schedule the file for delete after reboot. 98-09-01 bench Bug 6596: if the user ignores the failure to overwrite a file because the file is acl'ed, we used to copy a temp file anyway and schedule a rename operation. a fix was made to no longer do this. 98-09-01 mattwe Bug 6645: InstMsi/CopyMsi now correctly determine the existence of a previous MSI install for non-admin upgrades of Darwin. This will allow you to upgrade *from* non-standard install locations (build tree, et cetera.) We still only install *to* the SystemFolder. ----------------------------- Release 0.10.4431 ----------------------------- 98-08-28 cgouge Bug 6670: Validation, Registry and RemoveRegistry Root columns now allow HKEY_CURRENT_USER (value -1) 98-08-28 mattwe Fixed bug 6552: On Win9x, we will create an autoexec file if one doesn't already exist. 98-08-28 cgouge Fixed Bug 6646, all samples changed to use correct SourceDir property. 98-08-28 chetanp fixed bugs - 6672, 6673 - incorrect fonts sql queries. 98-08-27 davidmck Fixed bug 6562. We now stop any custom action thread from closing a handle that it did not open. In addition, any non-custom action thread can close any handle it wishes. There is still a hole where a custom actoin can start another thread and close any handle it likes. If custom actions want to be evil, there are lots of things they can do besides this. Note that we've changed this to be an error return of ERROR_INVALID_THREAD_ID for custom actions, so before they would just assert, now the handle will not be closed. 98-08-27 chetanp bug 6573 - we now install shfolder.dll with darwin on Win9x and assume it is always present. Hence we install to the AppData folder all the cached information (icons and transforms) and fail if we cannot do so. Previously we had code to fall back to using the \Installer folder. 98-08-27 chetanp bug 5514 - added support to munge through DD shortcuts on Win98/Win9s + IE4 to prevent removal of upgraded shortcuts (support already existed for WinNT5) 98-08-27 cgouge Fixed 6656, Validation, perf issue with ICE30. 98-08-27 mattwe Fixed bugs: 6573: added shfolder.dll to instmsi/copymsi for ANSI x86 Win9X. 6497: Manually updated instmsi/copymsi file languages for several support files from independent to 1033. 98-08-26 chetanp bug 6598 - fixed assert in ComposeDescriptor 98-08-26 malcolmh Fixed bugs: 5903 Without installing Office9, choosing "Uninstall" from Install.msi context menu results in installing IE5 We now prevent /x from working if you haven't at least advertised the product. 6603 MsiInfo doesn't detect corruption in the attached db, altho there is an invalid refcount. 6567 Need to stop advertising the contents of the AppID table altogether 6601 Privileged Property is not being set by the AlwaysInstallElevated policy. 6620 Transforms: There are difference between the dbs after applying the transform Fixed a problem with transforms that had > 64K strings. 98-08-26 bench Fixed bug 6617: added a new property, DISABLEROLLBACK, which will disable rollback for the current installation. this behaves identically to the DisableRollback policy value. 98-08-26 mattwe Added shfolder.dll to darwin\tools\bin\x86, for installation with instmsi/copymsi on Win9x platforms. 98-08-26 tracyf Fixed bug 6580 - for files with the ValidCheckSum bit set in the File table, we now repair the existing file if either the stored and calculated checksums don't match (as before), OR if the file has no detectable checksum (i.e. the file might be so corrupted we can't read the file header). 98-08-25 cgouge Validation: New ICE30. (Bug 6014) Ice30 checks that two different components don't install the same filename into the same directory. It will check both LFN and SFN cases, and will also catch equivalent directories under keys in the Directory table. Generates an error if any files collide, unless both components are conditionalized, in which case it generates a warning. 98-08-25 cgouge Validation: ICE35 update (checking compressed components for RFS), only generates one error per component per media table entry. This avoids an overwhelming number of error messages. 98-08-25 mattwe Due to non-admin user installs being rather picky about security permissions, I've generalized the LockPermissions data in TestDb to primarily values that allow the current user to access them. ----------------------------- Release 0.10.4424 ----------------------------- 98-08-21 cgouge Validation: Bug 6474, New ICE 36 checks that all icons are used in the Class, ProgID, or Shortcut table. Warns if any extraneous icons are found. 98-08-21 cgouge Validation: Bug 6358, new ICE 35, checks that components containing compressed files cannot be set to RFS. 98-08-21 chetanp fix 5681 - On Win9x - If Profiles are on and start menu is per-user - darwin goop to HKCU, transforms and icons to AppData. If Profiles are on and startmenu is shared - darwin goop to HKLM, transforms and icons to Windows folder. Profiles are not on (start menu is shared) - darwin goop to HKCU, transforms and icons to AppData. 98-08-21 chetanp bug 6043 - we now attempt to use shfolder.dll to create the App Data (and all other shell) folders, if absent. 98-08-21 malcolmh Fixed (again) bug 6353: Rolling back an install can remove ACLs from a file 98-08-21 malcolmh Fixed bug 5979: Darwin should fail msiadvertisescript calls when transforms conflict. We now have a script new flag: SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST. If this flag is specified, and we're not removing, then we require that the transform list in the script's ixoProductInfo field match exactly the transform list registered for the product. If the product isn't registered then the script may contain any transform list. We'll return ERROR_INSTALL_TRANSFORM_FAILURE if the flag is on and the lists don't match. 98-08-20 davidmck Fixed Bugs 6512 and 6478. I changed how we handle connecting to the service. Previously we would assert if the proxy msi.dll that was registered did not match the msi.dll we had loaded. Now we refuse to connect to the service. Also, on NT, if we need to access the installer key, we check when trying to create the config manager and fail if we need the key and cannot access it. This will prevent us from hitting an error later on when previously we would create a local config manager, but it would be unable to run an install. 98-08-20 davidmck Added MsiGetFileVersion API (Bug 6234) for tools to get darwin's idea of a file's version and language information. 98-08-20 malcolmh Fixed bug 6553: Elevated selfreg doesn't work for run from net components 98-08-20 mattwe Fixed bug #4768: The error message was completely accurate. We couldn't create a security descriptor for a user we couldn't find. I've changed TestDB's authoring such that its LockPermissions should work in any domain. 98-08-20 chetanp bug 4893 - We now write optimized darwin descriptors in the event we have a product with only one feature or if we have a feature with only one component. 98-08-20 bench Fixed bug 6557. When patching a network image, we now set TARGETDIR to the network image path to ensure the existing admin image will be patched rather than requiring the user to supply the appropriate TARGETDIR path or re-enter the path in the admin dialog. 98-08-20 malcolmh Fixed bugs: 6372 Need to add recursive select options to the selection control 6374 Need to change the selection manager combo boxes to buttons 6376 Need to add an icon state to the selman that indicates subfeatures are of mixed state There are 3 new UIText table entries: MenuAllCD Entire feature will be installed to run from CD MenuAllLocal Entire feature will be installed on local hard drive MenuAllNetwork Entire feature will be installed to run from network The selection tree now supports "Make me and my children local" and "Make me and my children source". The selection tree now greys the feature state icon unless all children of the feature are in the shown state. 98-08-20 chetanp bug 6549 - changed component installation behaviour - We used to prevent an older component (lesser keyfile) from overwriting an already DARWIN installed newer component (implying, if the file exists without having being installed by darwin - we go ahead and install the component irrespective of the version - since we did not trust the previous install to be complete/ exact). Now we dont care how the newer file got there, we prevent the install, irrespective of whther we (Darwin) installed or not. 98-08-20 chetanp fixed bug 6454 - We now allow for setting a property to a registry/ Ini value as is via the RegLocator/ IniLocator table w/o the interpretation as a file or folder and without verification that it exists. We allow for this by using the value 2 in the RegLocator.Type/ IniLocator.Type column. Of course, if someone uses this to set a Directory property, and it is invalid, we would fail. 98-08-20 malcolmh Fixed bug 6477: Still writing AppId key when advertising on downlevel system 98-08-20 malcolmh Fixed bug 6504: Uninstall Patch and Security: /x uninstalls appears to elevate where /i Remove=All doesn't This was caused by our incorrectly determining whether the product is "managed". In the ARP case we know that the product is not managed because we're handed the product code up front. In the "/x" case we don't know the product code up front so we think the app is in first-run. Because the user is an admin and it's first-run, we elevate. I've pushed back our "Is this app managed" check into Engine::Iniitialize to solve this problem. I added a new iei return from Engine::Initiialize called ieiPackageRejected. This maps to ERROR_ACCESS_DENIED, the same value that we used to return when a package was rejected for security reasons. ----------------------------- Release 0.10.4420 ----------------------------- 98-08-19 johndelo Bug 6539 - Broken OLE32.DLL supplied with IE 4.01 SP1 Win 9X only, causes failure with compressed stream names. New OLE32.DLL available, currently in \\jdelo3\public. To avoid problems on Win9X, the compressed stream naming has been disabled, by can be reenabled for testing by setting the environment variable _MSI_TEST to a string including the letter Z. The use of the APIs to manage streams and storages in a database is still operational. ----------------------------- Release 0.10.4419 ----------------------------- 98-08-18 johndelo Bug 4130, 6462 - Changes to stream names in MSI files. Changes to MSI persistent stream handling: There have been a number of problems with stream name limitations in the current implementation of OLE docfiles: 1. Stream names are limited to 31 characters. This is unacceptable for stream names that must be uniquely qualified with a GUID. 2. Stream names are case-insensitive on open. This could cause unexpected problems in merging, as the generated stream names internally in MSI are case-sensitive. 3. Certain stream name lengths cause erroneous behavior and crashes inside OLE32.DLL. 4. Storage names, private streams managed solely by the database, and user-streams such as custom actions, icons, bitmaps, and cabinets all share the same namespace, with the potential for disastrous consequences. In addition, there has been no way for tools to add streams and substorages to the database being processed, as there is no access to the storage. They have been forced to save and close the database, and then use direct OLE calls. This requires in some cases knowledge of specific information, such as storage CLSIDs. Forcing such direct access makes it impossible to upgrade our persistent file format in the future, a very serious constraint. ---Solution--- 1. Stream names are compressed internally, and can use up 62 characters if the characters all belong to the identifier set (letters, digits, period, underscore), which it true for the stream names generated from tables having stream columns. Non-identifier characters are acceptable, but will not participate in the 2 to 1 compression. Stream names beginning with the control character '\005', such as "\005SummaryInformation" are never compressed, as they must be publicly accessible from property browsers. 2. Stream names are case-sensitive on open, due to the compression scheme. 3. External stream data, private database streams, and storages have separate namespaces. 4. To support external addition of streams and substorages, two new pseudo-tables have been created: _Streams and _Storages. These are not persistent tables, but are simply temporary tables created on demand and filled using our stream and storage enumerators when one of those tables is loaded. They each have two columns, Name which is the string name of the stream or substorage, and Data which is a stream holding the data. Standard queries can thus list the non-private streams and substorages, and new streams and substorages can be added from files using the existing API MsiRecordSetStream. Streams and substorages can be deleted by setting the stream data to NULL. Stream data can be extracted with the API MsiRecordReadStream. Substorage data cannot be extracted with this API currently, but since the names are not compressed, OLE APIs can open the substorages. 5. Updated views of _Streams and _Storages tables will be written when the view is closed or on MsiDatabaseCommit. If the data could not be written when the view is closed, it will be retried on Commit (same as with other database tables), and an error will be generated at that time if unsuccessful. 6. Databases generated with old stream names will be processed as before, and will thus have the limitation mentioned above. They are distinguished by a different storage CLSID. 7. There will be a compatibility mode for some period of time, which will use the old stream names and the old storage CLSID, to allow the generation of databases that can be used by older versions of MSI. This mode is forced by adding the bit flag 16 to the open mode for database or storages. Internally that is defined as idoRawStreamNames or ismRawStreamNames. 8. Transforms, a variant of the database format, have the same stream limitations, and will also use the compressed stream naming if the input database uses compressed streams. Some options have been added to MsiOpenDatabase, but are not currently in msiquery.h MSIDBOPEN_RAWSTREAMNAMES = 16 // old-format names MSIDBOPEN_PATCHFILE = 32 // patch file as DB The latter allows patch files to be generated using the MSI API functions, without having to know the internal storage details. MsiDb.EXE temporarily has an option, -o, to create an old-format database, rather then -c for a new-format database. Old-format databases, transforms, and patch files can be read by the new MSI. However, this backward compatibility will be removed before ship. A sample VBScript which generates and views files with streams and substorages is at DARWIN\src\tools\script\patchtst.vbs Yet to do: MsiTran.EXE needs to be updated to view transform file internal data. Documentation for newsystem tables, _Streams and _Storages, and revised documentation for patch file generation, using the MSI APIs. 98-08-18 johndelo Bug 5036 - move component mapping to machine registry. Each feature for a product registers the list of component IDs along with the name of the parent feature. In the past this information has be in the user registry, and the size taken can be considerable for a product with many features and components. For the following reasons, this feature-component mapping has been moved to the machine registry along with the component registration: 1. Much space taken in user profile with component IDs, even for applications that have never been installed. 2. Advertise scripts bloated with needless component IDs. 3. Logon time adversely affected by excessive registration. 4. Performance improvement by avoiding opening of user registry keys during activation of installed features. 5. Need to bring all the component logic together in preparation for eventual move of registration out of HKLM, for improved performance and resource usage. Products that are advertised should present no problem, as we temporarily handle the old registration (this will eventually be pulled for increased performance). And old packages and old advertise scripts will still work fine. But products that are already installed and use MSI to find or fault in components will need to be reinstalled. Alternatively, a tool, MsiMig.exe, is in our release that will migrate the feature-component mapping for all installed products. It would be nice if the new MSI would handle both old and new registrations, but this proved to be much to complicated to implement and test. In order to allow newly generated advertised scripts to work with older versions of MSI, the stripping of the feature-component mapping from the script files is temporarily disabled to give time for users to upgrade (the stripping can be forced by setting the environment variable: _MSI_TEST=J 98-08-18 malcolmh Fixed bug 6536: Uninstall fails to delete a file that the user can delete with explorer 98-08-18 tracyf Fixed up the BasicUI dialog to better match Windows guidelines (bug 6498) 98-08-18 mattwe Fixed bug 6475 - Objects whose security is set via the LockPermissions table now pass their security onto their children via inheritance. 98-08-18 chetanp fixed bug 5642 - We now have file versioning logic for TTC fonts. As per attached thread, we take the first font in the TTC file, and use its version to stand for the version of the TTC collection in general and for TTC vs TTC file comparisions. 98-08-18 tracyf Fixed bug 6033. The fix reduces Darwin's stack requirements considerably (previously, the large buffer Darwin uses for copying files was being reserved on the stack, potentially causing problems for host applications with a small stack size - it is now allocated on the heap). 98-08-17 malcolmh Fixed bug 6491: MsiEnumProducts failed to skip the bad ProductCode. 98-08-17 chetanp fixed bug 4265 - removed support for database versions < 28 98-08-17 mattwe Fixed bug 6255 - changed instmsi/copymsi to detect Win98 as Version9X < 410, instead of < 411. Some machines have 411, some have 410. 98-08-17 mattwe Fixed bug 6513 - UpdateEnvironmentStrings on Win9x wasn't getting passed the location to the autoexec correctly. 98-08-17 davidmck Fixed bug 4196 - Perf improvements for faulting in components. See the bug for details on all that changed in order to regression test appropriately. 98-08-14 t-caroln Fixed bug 5679, VALIDATION. ICE28. Validates for actions that can't be separated by ForceReboot using the _SetExclusion and _PlaceHolder tables in the darice.cub file. These tables are in %DARWIN%\src\tools\iceman\ices. This ICE can be made to handle any other actions similar to ForceReboot that can't break up a set by modifying those tables. 98-08-14 t-caroln Fixed bug 6485, CMsiDatabase::ImportTable not catching all errors, Changed to handle a failure during SaveToStorage of the table or the _SummaryInformation stream. Returns a debug error only (as this failure shouldn't occur during ship). 98-08-14 t-caroln Fixed bug 5423, VALIDATION. This concerns ICE26 which validates required/prohibited actions in the Sequence tables. Validation is based off of the _Action table located in %DARWIN%\src\tools\iceman\ices and I have included an XL spreadsheet in the same directory with a table of the values that I used. I based it off of template.msi and testdb.msi and both pass this ICE. However, if changes are needed, only change the _Action table by turning off/on the specific bit. AdminUISequence is 0x00000001, AdminExecuteSequence is 0x00000002, AdvtUISequence = 0x00000004, AdvtExecuteSequence = 0x00000008, InstallUISequence = 0x00000010, InstallExecuteSequence = 0x00000020 98-08-14 davidmck Perf change to CMsiFileStream : We now buffer this similarly to the buffering of the CMsiStream object. This gives us a large improvement on writing and reading the script file. 98-08-13 chetanp fixed bug 4347. RMCCPSearch is a noop if the CCPSearch table is missing or empty. 98-08-13 mattwe #6430: removed the progid table from instmsi. All of this is handled via custom actions. #6125, #6433: Ben's fantastic work has enabled us to remove the move/rename hacks from instmsi. The instmsi/copymsi database now pass validation again. 98-08-13 cgouge Validation: New ICE34. Validates that radiobutton groups all have defaults so that blind users can use them effectively. Handles both direct and indirect contrrols. TestDB FAILED this ICE, so I added 3 properties to the property table to set the defaults in several groups. 98-08-13 malcolmh Fixed bugs: 6353: Rolling back an install can remove ACLs from a file 6176: AD: Darwin does not always reset Busy flag on failure 6323: AD: Call to CoInitializeSecurity in Darwin service too loose and can be a potential hole 6456: Patching: Security ACLs altered on patched file. 6457: Patching: Insufficient Privileges to remove cached .msp on Uninstall 6340: Providing a URL in Network Resource Dialog fails to find source files. 6442: Need to add the TTCSupport property for those systems that support TTC's 6445: Patching: Applying bad patch to an advertised app riggers assert in msiutil.cpp 6447: Patching\Transforms: Memory leak after transform fails during patch 6422: Get internal error 2260 when expecting network error 98-08-13 bench Fixed bug 6428: template.msi contained two ValidateProductID control events, which caused an error when attempting to use this package without adding the PIDKEY and ProductID properties. Since these properties are optional, the control events were removed to prevent this error. The control events were in turn added to testdb.msi to keep it working. 98-08-13 t-caroln Fixed bug 6432, authoring error in msival2. Avoid problems now by using the merge database process in the makefile. Now merge in template.msi. ----------------------------- Release 0.10.00.4413 ----------------------------- 98-08-12 andrewh bug 6460 - return code from instmsi/copymsi was always failure. 98-08-12 andrewh bug 6455 - InstMsi requires a reboot on NT4/sp3, the file table entry for ImageHlp.dll was incorrect, causing us to try to install it when an equal version exists. bug 6459 - Instmsi.exe /q reboots without asking, the REBOOT=Reallysupress property is set on the command line for quiet instmsi's. ----------------------------- Release 0.10.00.4412 ----------------------------- 98-08-11 chetanp fixed 4347. We skip the AppSearch, CCPSearch and the RMCCPSearch actions in InstallExecuteSequence table if we have run the InstallUIsequence table. Also we have put the restriction that AppSearch should use public properties only (to allow us to skip AppSearch if we have run it on the UI side). Also we fatal error out of RMCCPSearch, if previously CCPSearch had not succeeded and RMCCPSearch does not succeed. Hence we no longer need the CCPFail UI dialog. 98-08-12 mattwe Bug #6421: file versioning for instmsi was busted for the main Windows installer files. Fixed with pointing msifiler to the build dir. 98-08-12 t-caroln Fixed bug 6010, VALIDATION. ICE29, which validates stream names (ensures that if truncation must occur to fit within OLE Storage's 31 char limit that the stream names will still be unique). 98-08-11 chetanp fixed 6034. if we need to increase the registry quota for an install we now persist the increase across reboots (before it was effective only for that session - ie until reboot, hece we ran into problems after a reboot, since the registry quota was now already overflown). 98-08-10 mattwe Bug #6416: we were using a string column as an integer, and finally got caught without a string by that id to back it up. The DirNonConfigurable in the directory table is now short, instead of string. 98-08-10 chetanp fixed bugs 6379, 6402 - incorrect assumption that product is (admin) assigned when called by the local system (example during InsertObject of a feature of a non assigned product). 98-08-10 t-caroln Fixed bug 6178, Strings not displaying correctly on Win9X JPN. We now on Win9X call CreateFont to obtain a Font Handle and then sending WM_SETFONT messages to the controls on the dialog. 98-08-10 mattwe Bug #6409: Added msi.dll, msihnd.dll, and msiexec.exe to the BindImage table for instmsi/copymsi 98-08-10 bench Fixed bugs 5234 and 6396. The "vital" bit in the File.Attributes column and the "non-vital" bit in the Patch.Attributes column are honored by patch application. When the patch "non-vital" bit is set all errors for that patch are ignored. Otherwise, the file "vital" bit turns off the "Ignore" button on errors patching that file. 98-08-10 mattwe Bug #4811: We weren't retrying missing uncompressed files from a URL server. Involves a change to CopyFile. 98-08-10 t-caroln Fixed bug 6065. Testdb.msi not pass validation. Testdb had failed ICE18 validation. 98-08-10 t-caroln Fixed bug 6401, defined ErrorDialog property in Property table for template.msi 98-08-10 t-caroln Fixed bug 6400 dealing with a schema problem in template.msi. Also fixed all schema differences reported by the skemadif tool for all of the databases. 98-08-08 t-caroln Added a -f option to msival2 so that you can suppress info messages. msival2 {database} -Z -f will only display errors and warnings. 98-08-08 t-caroln Fixed bug 6220 -- VALIDATION. Now ICE27. ICE27 makes the cube file have all of the functionality of msival.exe. ICE27 validates the organization and the order of the Sequence tables. Because it handles the organization, I removed that code from msival.exe. MsiVal.exe still does data validation and sequence order validation. The _InstallValidate table is now no longer needed. Your database does not have to have the _Sequence table for ICE27 to work (as it is included in the cube file). A new table was added, the _Action table. If you add a new standard action, you need to update this table with the correct information. The table is located in %DARWIN%\src\tools\iceman\ices. 98-08-06 malcolmh Fixed bug 6002: Unexpected error 2335 when running nested install 98-08-06 malcolmh Fixed bug 6299: 'Product Code not registered' is too geeky 98-08-06 chetanp fixed bug 5629: For the Published Component API functions, we now enumerate through all the locations (hkcu\s\c\i, hkcu\s\m\i, hklm\s\c\i) in the order of precedence for qualifiers for the same component (id). We take care to skip repetitions during enumeration. 98-08-06 mattwe Bug 6110: Fixed DatabaseCopy operation for URLs to copy from the currently running database instead of downloading from the internet again. This also involved an optimization during opening the database to run from the copy in the internet cache in the user's profile, rather than copying from there to the temp file, and then running there. 98-08-05 malcolmh Fixed bugs 6334, 6335, 6357: Issues with UNICODE APIs on Win9X 98-08-05 malcolmh Fixed bug 6332: invoking maintenance mode from package results in caching of new package 98-08-05 bench Fixed bug 5952: if a suspended install exists that was running a different top-level action than the current install, we resumed the in-progress install with no warning to the user. The user is now asked to rollback the suspended install before continuing. 98-08-05 malcolmh Fixed bug 6361: Selecting alternate path from SourceList dialog uses prior source in list. 98-08-05 malcolmh Fixed bug 6180: Install should failed when logon user has not privilege to replace a file. 98-08-05 malcolmh Fixed bug 6356: Non-admin w/ DisableRollback set can't uninstall 98-08-05 tracyf Fixed bug 6271 - All apps with a file in use are now listed in the FilesInUseDialog, not just the first. 98-08-05 mattwe Bug #6255: We no longer install ImageHlp.Dll on Win98 machines. Bug #6039: We now hide the extraction animation from IExpress for copymsi/instmsi. This results in a several second delay in the regular mode, but a completely quiet run for Office. 98-08-05 tracyf Fixed bug 6194, such that features marked with the DisallowAbsent attribute will be guaranteed to be installed if that feature's parent is installed (see the bug report for specific instances where this was not always the case). 98-08-04 malcolmh Fixed bug 6331: MsiGetUserInfo string length arguments not consistent 98-08-04 mattwe Bug #6256: We were registering the non-verb shell info from the temp directory for copymsi/instmsi. It's now a custom action on the target bits at the end of the install Bug #6262: Cleared up the 9X registration story for copymsi/instmsi. We now DllRegisterServer on msi.dll on 9X. /regserver is wrong, as well as not registering anything at all. Bug #6260: We now install msierror.msg on all platforms. Design note: this is *always* installed, so you may end up with a newer version with older Darwin. These should be backwards compatible, however. 98-08-04 bench Fixed bug 5987: applying two patches to an install left the install broken and unusable. 98-08-04 malcolmh Fixed bug 6301: PATCHING: Patch sourcelist doesn't contain the PackageName 98-08-04 malcolmh Fixed bug 6303: PATCHING: Resliency doesn't work. Cached patches are not restored from source 98-08-04 malcolmh Fixed bug 6304: PATCHING: The source that a patch is invoked from is not added to the patch's sourcelist 98-08-04 bench Fixed bug 6305: added another potential value for the REBOOT property: REALLYSUPPRESS. (only the first character is checked so REBOOT=R works as well). When this value is used, even reboots triggered by the ForceReboot action are suppressed. These reboots are not suppressed by REBOOT=S(UPPRESS). 98-08-03 malcolmh Fixed bug 4975: Upgrade: SourceList PackageName unchanged after reinstall of upgrade msi over patch 98-08-03 malcolmh Fixed bug 6316: PATCHING: When a product "takes over" for a patch+product the new package code is not registered 98-08-03 t-caroln Fixed bug 6254. Engine Condition Parser now handles the possibility of DBCS characters in the string literal correctly. Also fixed the related area in the Validation condition parser. The CharPrevCch function in istring.cpp now respects the DBCS simulation. 98-08-03 t-caroln Fixed bug 5773. ICE17. An update to ICE17 to validate Picture buttons correctly. The update validates the Bitmap and Icon controls as referencing entries in the Binary table (unless the Image Handle attribute is set). It also validates that any PushButton, CheckBox, or RadioButtonGroup with the bitmap or icon attribute set (not both) correctly references the Binary table, unless the Image Handle attribute is set. For RadioButtonGroups, it validates each RadioButton belonging to the property specified by the RadioButtonGroup. ----------------------------- Release 0.10.00.4403 ----------------------------- 98-07-31 cgouge VALIDATION: Bug 6016, New ICE#31. Added ICE31 to examine text controls for TextStyle tags and validate those tags against the Text Style Table. Gives warnings if the text style is missing. Also gives a warning if the text style is bogus for some reason (more than one, not at beginning of text, etc). Added file \src\tools\iceman\ICEs\msiice5.cpp 98-07-31 t-caroln Fixed bug 3311 - ICE32. Validates that the keys and foreign keys as listed in the _Validation table are the same size and type. 98-07-31 andrewh 5397 - Fixed the Network Resource (aka Insert your CD-ROM) dialog to parent correctly 98-07-31 malcolmh Fixed bug 6250: when transform resiliency is activated we apply transforms too many times 98-07-31 chetanp bug 5267 - we now allow the Font.Title column to be null for .TTF files. If the Title is not provided, we get it out ourselves from the font file. This eliminates authoring error for this column. NOTE: The Font.Title column specs have changed from NotNullable to Nullable. 98-07-31 malcolmh Fixed bug 6050: Too hard to machine-assign by default. We now support ALLUSERS=2 which causes us to do a machine install if possible, otherwise do a user install. 98-07-31 malcolmh Fixed bug 6190: Fix impersonation from service context in path object. 98-07-30 bench Fixed bug 6261: a few files were left behind after rollback of a patch application. 98-07-30 mattwe #6218: changed verb registration in copymsi/instmsi for admin installs to /A from /N. Was working off an old doc. 98-07-30 Tracyf Fixed bugs 6233 and 6275 (errors when browsing to a volume in which the user has no write permissions at the root of the volume, but can write to subfolders). 98-07-30 Tracyf Fixed bugs 5706, 6269, 6273 (all involving Selection Tree problems in maintenance mode). 98-07-30 bench Fixed bug 5659: verbose logging is enabled. Verbose logging is triggered by the 'v' log mode, and contains much more useful information than the normal log. Note that verbose logging doesn't log ALL debugmsgs (stuff written to debug output). 98-07-30 t-caroln Fixed bug 6239 --> ICharNext in UNICODE now behaves the same as WIN::CharNext. Also added INextChar which does not do the check on the pointer. When using INextChar you need to check to make sure you don't run off of the array. 98-07-30 t-caroln Fixed bug 6247, Auto::ComponentPath returns EMPTY on error from MsiGetComponentPath. 98-07-30 bench Fixed bug 5943: each patch package (msp file) can now contain a list of old patches that are removed when the new patch is applied. This list is stored in the summary info stream of the msp file in the REVNUMBER property. This properties format is now the patch code followed by the list of old patches. No delimiters seperate the different patch guids. 98-07-30 mattwe Note that the new CopyMsi (as of 4320) no longer installs the help files. This is by design, and is also suggested by the doc team. ----------------------------- Release 0.10.00.4329 ----------------------------- 98-07-29 t-caroln Fixed bug 5661, extending Version category validation to do better checks of the Language column (must not be a Binary or Long Integer column). If String, the Category in the validation table must be Language. 98-07-29 bench Added new incremental versioning scheme to build process. Rebuilds will now bump the last version field of all built files, and the drop folders will include the incremental version. For example, a rebuild of 4329 will be versioned 0.28.4329.1 and will be dropped to a 4329.1 folder. 98-07-29 cgouge Updated M3COM to handle module exclusion tables appropriately. This required a change to the M3DOCK tool. ----------------------------- Release 0.10.00.4329 ----------------------------- 98-07-28 t-caroln Fixed bug 6230, Validation. Validate_New now works for foreign key validations of self-joins for a record to be inserted (failed previously with a new record specifying a root directory with the Directory.Directory=Directory.Directory_Parent case). 98-07-28 bench Fixed bug 6075: assert and error when applying a patch to an admin install. 98-07-28 t-caroln Fixed bug 6231. Msival2 no longer crashes if you forget to specify the parameter following an option (like -i or -l) 98-07-27 chetanp bug 6200: fixed performance issue with multiple files in use detection inefficiency 98-07-27 t-caroln Overhauled the msidlgs.exe tool and re-wrote it. It now calls all W versions of API on WINNT and all A versions on Win9X. Added the /L option to print out all languages in the dll (msidlgs {msi.dll} /L). Now uses it's own LoadStringEx function. On Win9x the system must already be in the proper codepage. 98-07-27 malcolmh Fixed bug 6002: Unexpected error 2335 when running nested install 98-07-27 malcolmh Fixed bug 6190: We are not set fImpersonate correctly in CreateFileStream when call MsiAdvertiseScript from service using an UNC pathed script file. 98-07-27 malcolmh Fixed bug 6184: InProgress mutex is being created without a security descriptor. 98-07-27 malcolmh Fixed bug 5977: Feature caching prevents repair of parent features. 98-07-27 malcolmh Fixed bug 6198: MsiGetUserInfoW on Win9X doesn't handle DBCS correctly 98-07-27 malcolmh Fixed bug 6217: Specifying TRANSFORMS=foo.mst on the command-line causes crash 98-07-27 malcolmh Fixed bug 6044: Won't update components if the keyfile is of equal version or if certain reinstallmodes are set 98-07-27 chetanp bug 5514: fix shortcut removal issue during upgrades. We now delete DD shortcuts only if they point to our product. 98-07-24 malcolmh Fixed bug 6175: AD: Darwin uses different location for package even if asked to use a specific package 98-07-24 malcolmh Fixed bug 5205: Logging: note in event log causes of ERROR_BAD_CONFIGURATION 98-07-24 malcolmh Fixed bug 6001: AF: srcmgmt.cpp when removing LAN connection to source files 98-07-24 mattwe Bug #5568: Removed verb registration from msiexec /regserver. You now must run instmsi/ copymsi at least once get the verb registration. Bug #6118: We no longer use the verb/extension tables for the localized verbs in instmsi/copymsi Bug #1765: We've seperated the verbs for msiexec out into a res file, and are sending it to localizers. 98-07-23 davidmck Fixed Bug 5964,. We were doing background costing with an error message up. Probably not a good idea. 98-07-23 t-caroln Fixed bug 6099: Validation. Validation can now handle DBCS characters correctly. Also inlined the ICharNext and exposed it in istring.h. Updated all calls to use ICharNext which has special meaning in Debug (DBCS simulation). Ship calls WIN::CharNext directly and UNICODE directly performs a ++pch. Use ICharNext from now on. 98-07-23 t-caroln Fixed bug 6197 -- Validation of Sequence actions in Msival.exe. While msival would still work, if an action had more than one error related to it, it would only print it out one time. Thus, the user would fix it, run msival again, and it fail again (for the 2nd error that it didn't print out). Now all errors are printed out in one swoop. 98-07-23 chetanp bug 6170 - The RemoveRegistryValues action should precede the UnregisterMIMEInfo and the UnregisterProgIdInfo actions to ensure that the ProgId and MIME information is removed upon uninstall in the case special subkeys/ values are added to the <.Extension> or keys in the registry via the Registry table. 98-07-23 chetanp bug 6179 - We now remove the extension only if the corr. progid has no more shell commands left. This allows for multiple applications to share extensions. 98-07-23 chetanp bug 6191 - check MsiAdvertiseScript dwFlags for validity. We now make sure that the bits passed in are from the enum tagSCRIPTFLAGS. 98-07-23 cgouge Added ICE25, bug 6018. Validates merge module dependencies and exclusions. ICE25 shares most of its code with M3COM, so src\tools\common is now on the dependency list for msiice.dll. 98-07-23 davidmck Perf improvements to version checking. We now get both the file version and language information at the same time. 98-07-23 t-caroln Fixed bug 6189 -- Validation. Formatted and KeyFormatted are transparent to Darwin, so made it so. Now Template, Formatted, and KeyFormatted all work as KeyFormatted (except Template has the additional [1] in integer property specification). KeyFormatted has not been removed though to maintain backwards compatibility. Formatted originally was a subset of KeyFormatted and now equates to KeyFormatted. All instances of KeyFormatted in _Validation table have been changed to use Formatted. 98-07-23 t-caroln Fixed bug 5799, crash w/ runscrpt.exe with the following : runscrpt.exe showmsi.vbs ListScript(testtran.aas) where testtran.aas is an invalid filename. Now the CScriptView and CScriptDatabase classes handle the error properly. 98-07-23 tracyf Fixed bug 5382. We were having problems when browsing from a volume that supports long filenames, to one that supports only short names. 98-07-23 tracyf Fixed bug 5393. We now do better error checking when attempting to write records to the execution and rollback scripts. 98-07-22 andrewh 6187 - Shortcuts were removed when changing from install local to advertised on NT5 (or IE4.01sp1 desktop update). 98-07-22 t-caroln Fixed bug 6183: MsiVal not work correctly for sequence validation. A query would always fail so I fixed it to validate correctly. This pretty much turned off the action must come before dependent action validation. Also fixed up some of the entries in the _Sequence table. 98-07-22 t-caroln Fixed bug 6021 --> Standard Dialog validation. ICE20. Due to a fix to 5220, the ICE had to be updated to handle ErrorIcon control correctly. It was also made to look for the required names of the Error buttons on the ErrorDialog. 98-07-22 malcolmh Fixed bug 5781: AD: Darwin returns 1610 (Configuration error) when it fails to establish connection to the source 98-07-22 malcolmh Fixed bug 6123: 4127c: some dialogs still not localized. 98-07-22 malcolmh Fixed bug 3799: Make sure all environment variables are expanded in the context of the user 98-07-22 davidmck Fixed bug 6029 - We were hogging CPU cycles by calling GetTickCount repeatedly if the selection manager wasn't initialized. Now we kill the timer for background costing for the window we are in if the selection manager is not ready. 98-07-22 mattwe Bug #6146: We didn't have ALLUSERS set for instmsi/copymsi, and the Registry stuff went to the wrong place. 98-07-21 chetanp bug 6062 - we no longer advertise Type Libraries in Darwin. The RegisterTypeLibraries action has been removed from the AdvtExecuteSequence table. Darwin will now ignore this action if encountered in the AdvtExecuteSequence table (for older databases). 98-07-21 chetanp bug 6109 - we now support SFN|LFN syntax in the IniLocator table. 98-07-21 t-caroln Fixed bug 6137. Added msiTransformValidationUpgradeCode enum value to type library. ----------------------------- Release 0.10.00.4320 ----------------------------- 98-07-20 mattwe Bug #6126: removed /regserver calls from msiinst on Win9X 98-07-20 mattwe Bug #4505: BackupFile without removing original file now copies the backup file over the original during rollback. This allows you to modify the original, and have it restored during rollback. This is currently only used by UpdateEnvironment on Win9X. 98-07-18 johndelo Bug 6131: New release directory: ToolsW to hold Unicode builds of the tools on both platforms. TestDb contains ANSI customactions on x86, Unicode on Alpha 98-07-17 malcolmh Fixed bug 6112: Assert in Execute.cpp during Patch (or Uninstall) when using Rollbacktest=1 98-07-17 malcolmh Fixed bug 6119: MsiGetFeatureInfo(hProduct, APIProduct.FeatureID(), &iAttribute, 0, 0, 0, 0) should return 0. It returns:87 98-07-16 mattwe Bug #6115 - for some reason an impersonated reboot was failing to get a process token. We had a call to EnableReboot, and it works now. Bug #5828, #5878 - Added a timeout on the WaitForService in case something goes really wacky. 98-07-16 chetanp bug 6084 - removed UpdateResource functionality 98-07-16 chetanp bug 6082 - refined the symantics for the reinstall flags. see bug for more info. 98-07-16 t-caroln Fixed bug 6012 -- ICE24. Validates the ProductCode, ProductLanguage, and ProductVersion properties in the Property table. 98-07-16 mattwe Bug #5900: Stubbed security descriptor retrieval to immediately return on Win 9X. Bug #5635: Changed UpdateEnvironment on Win9X to retrieve boot volume location from the registry. ----------------------------- Release 0.10.00.4316 ----------------------------- 98-07-15 mattwe Added new instmsi/copymsi. This is still a self extracting EXE, but has a radically different dance in the middle. NT requires either an admin user, *or* a pre-existing Darwin install on the system. Bug #4725: New registry key added for Hydra. Bug #4891: Now uses /qb+ to let Darwin determine success/failure of installation. Bug #5243: Added EditFlags to avoid packages being listed in the recent documents. Bug #5279: Registers an AppPath on Win95/98 to allow running msiexec from the command line without a path setting. Bug #5402: LaunchConditions prevent install on NT 3.51 Bug #5906: LaunchConditions prevent install on NT 5.0 Note: You can set the FORCE_MSI_UPGRADE_NT5 environment variable to any value to override this in InstMsi. CopyMsi overrides automatically. MsiFiler has been added to the makefile, to get in file versions and sizes dynamically. %darwin%/data/msimsi has been added to the project with the generic instmsi/copymsi database. TESTING: copymsi and instmsi should look externally the same. 98-07-14 t-caroln Fixed bug 6064 in evalcom. Left out a check for ERROR_SUCCESS. Now msival2 {database} {evaludation file} -i ICEX:ICEY:ICEZ works correctly. 98-07-14 t-caroln Validation. Fixed bugs 6071 and 6072. Validation was allowing || pipes (note, the error was in the validation parser used to pass the SFN or LFN to the global filename validator). Now it errors with more than one pipe. Also fixed the path validation. Due to the consolidation of code, it would report AnyPath's as invalid if they contained a property. 98-07-14 tracyf Fixed bug 5482: we now display the "Files in use" dialog, if appropriate, in BasicUI mode. 98-07-14 t-caroln Added a new tool --> MsiDlgs.exe. This is only built if you specify the msidlgs target. It is not built with all in the makefile. The msidlgs.exe tool displays the various dialog and message box resources in msi.dll. It can be used for viewing various localized versions of the dialogs (based off of the localized strings). Syntax for the tool is msidlgs.exe {msi.dll} {langId}. For example, for US English, run msidlgs.exe %DARWIN%\build\debug\msi.dll 1033. For German, try msidlgs %DARWIN%\build\debug\msi.dll 1031 98-07-14 malcolmh Fixed bug 6052: AF:fcache.cpp line342, running command line repair: msiexec /frocums {6E8DD198-AB04-11d1-B5B8-006097C998E7} 98-07-14 malcolmh Fixed bug 6051: We should define at least on more enum for tagINSTALLTYPE. 98-07-14 malcolmh Fixed bug 6025: Rollback: On Win95 if Uninstall fails, files flagged for delete after reboot are still in WinInit.Ini 98-07-14 malcolmh Fixed bug 6025: Rollback: On Win95 if Uninstall fails, files flagged for delete after reboot are still in WinInit.Ini 98-07-13 malcolmh Fixed bug 5468: UILevel not persisted across a force reboot action 98-07-13 malcolmh Fixed bug 6045: User with user permissions can't uninstall due to Permissions on Feature Usage keys 98-07-13 malcolmh Fixed bug 5998: NT4 ZAK: assert in engine during removal of testdb on client workstation 98-07-13 malcolmh Fixed bug 5948: Patching: Installing new version doesn't remove patch 98-07-13 malcolmh Fixed bug 5994: LastUsedSource is not updated when maintenance mode is invoked from a new source 98-07-13 malcolmh Fixed bug 6041: MsiApplyPatch(szPatchPackage, 0, INSTALLTYPE_NETWORK_IMAGE, 0) crashes. 98-07-13 malcolmh Fixed bug 3586: Application Error on Alpha, when MsiGetProductProperty is called. 98-07-13 malcolmh Fixed bug 6004: Assertion failed in iconfig.cpp:Line 554 when install after machine advertise. 98-07-11 mattwe Bug #4858: The service now shuts itself down during logout/log off to enable profile roaming. 98-07-11 t-robmen Fixed bug 5590: Changed the column width for any Primary Key Column that can be affected by Merge Modules to 72. 98-07-10 eugend In response to bug # 5220, I've changed the look of the ErrorDialog in Template & Testdb.msi. I've replaced the Picture control (of Bitmap type), with ErrorIcon of Icon type. If this particular control is present on the ErrorDialog (it HAS to have the ErrorIcon name and to be of Icon type), the handler got the new functionality to display the following - IDI_ERROR (formerly IDI_HAND) in response to messages of imtFatalExit type sent to the handler. - IDI_WARNING (formerly IDI_EXCLAMATION) in response to imtError and imtWarning message types. - IDI_INFORMATION (formerly IDI_ASTERISK) in response to imtOutOfDiskSpace and imtUser message types. In order to further enhance the message box look, when we display the icons, we play as well the proper sonds. Please note, that if the ErrorIcon control of Icon type is not present, no icon will get displayed. 98-07-10 t-caroln Fixed bug 6021, standard dialog validator. (For FilesInUse, DiskCost, Error (as specified by the ErrorDialog property), Cancel as well as coverage of the FatalError, UserExit, Exit sequence numbers). 98-07-10 malcolmh Fixed bug 5698: We now report to the event log component detection failure (via ProvideComponent). 98-07-10 malcolmh Fixed bug 6024: Machine assigned app with 2 or more transforms fails on uninstall. 98-07-10 malcolmh Fixed bug 5864: We now have an event log on Win9X. It's %TEMP%\msievent.log. If we would've written to the real event log on NT then we write to this file on Win9X. If we fail to write to it then we delete it and try again. 98-07-10 cgouge VALIDATION: New ICE #23 - Bug 6017. ICE 23 validates that the tab order for control in a dialog is a single closed loop. Also verifies that the loop is encompasses every control that has a Control_Next entry. 98-07-10 mattwe Added the ability to set an alternative source directory for msifiler. This allows you to get file sizes/versions from a swamp type directory, instead of having a distribution image. (For instmsi/copymsi primarily.) 98-07-10 tracyf In response to bug 3495, A new property is now written to the Admin property stream: IsAdminPackage. This property will be available and set to a value of "1" when running from a package that was created by an Admin installation. 98-07-10 malcolmh Fixed bug 5993: Cannot invoke a patch from a path that has a space in it. 98-07-10 malcolmh Fixed bug 5232: consolidated in-progress properties so we don't repeat feature selections 98-07-10 malcolmh Fixed bug 5171: reboot during (after) managed app install with full UI not using elevated privs. Reboot is again a method of the server to allow managed apps to reboot even when the user is not allowed to. 98-07-09 johndelo Made provision for localized string resources. Directory for localized .res files: DARWIN\SRC\INTL German translation of all strings, but not final strings. French and Arabic only partially translated for test. Still need to deal with right-to-left switching. 98-07-09 t-caroln Fixed bug 6005 -- Validation. Version string validation failed on 99.99.9999.9999. Now works (last 9999 was failing). 98-07-09 davidmck Fixed bug 5407 - avoiding powerdown when doing an install. We have a hidden window to handle powerdown queries. This may cause some windowing oddities, so be on the lookout for such issues. 98-07-09 davidmck Fixed bug 5966, binary data now shows up as "BinaryData" in a formatted record. ----------------------------- Release 0.10.00.4309 ----------------------------- 98-07-09 t-caroln Fixed bug 4107 -- setting and getting of a FILETIME property from the summary information stream. Now when setting, properly converts from Variant to System to Local to File. When retrieving, converts from File to Local to System to Variant. Now both API output, msiinfo output, and export of _SummaryInformation "table" match. 98-07-08 malcolmh Fixed transform bugs: 5170: Need to pin "secure" transforms on NT5 5886: If the transforms list is preceded by @ and multiple transforms are used then only the first is found at the source during first-run 5887: First-run doesn't respect TRANSFORMSATSOURCE property 5888: Specifying storage transform + TRANSFORMSATSOURCE property causes storage transform to be ignored during maintenance mode 5901: First-run doesn't respect TRANSFORMSATSOURCE policy We now have a new kind of transform: the secure transform. It's indicated by the "|" at the front of the transform list. There's also a policy value "TransformsSecure" and a property "TRANSFORMSSECURE" that can be used to trigger secure transforms. We will pin any transform marked as secure so that it stays in the client-side cache. 98-07-08 malcolmh Fixed bug 5381: Darwin: launching more than 3 or 4 setups causes darwin to not respond. 98-07-08 malcolmh Fixed 5982: StartImpersonating w/o StopImpersonating CMsiVolume::SetUNCServer 98-07-08 davidmck Changes MsiEnumClients internal code. This shouldn't affect how it works on the outside, but might, so the API should be tested. This change was made so that for calls internally, we'll keep the key opened and saves a bit of time. 98-07-08 malcolmh Fixed bug IMsiServer::SetLastUsedSource fails when called while an install is in progress for a different user. 98-07-07 malcolmh Fixed bug 5959. crash in msi.dll running deferred CA during removal 98-07-07 malcolmh Fixed bug 5946: MsiProvideComponent crashes after avertise. 98-07-07 malcolmh Fixed (again) bug 3988. Local caching path should include product code or something unique per product. We now correctly append the product code to the cached path on Win9X and for machine installs. 98-07-07 chetanp bug 5957 - we now allow reg types other than REG_SZ to be written as default values. This was previously explicitly disallowed since it fails on Win95. So now this will work on WinNT and Win98 but fail on Win95 (as the Win API call will fail). 98-07-07 t-caroln Fixed bug 3589. For temporary databases (databases w/out input storage), we mark any created columns as temporary by default. Formerly we were allowing persistent columns in temporary databases. 98-07-07 andrewh 5955 - Assert before bringing up Insert your CD dialog. Assert fixed, it was using GetSize on a tempbuffer for string length instead of a strlen call. 98-07-07 bench Fixed bug 3632 (again): when an error occurs and logging is not already enabled, a dynamic log is created. The latest fix is to turn on logging for just errors and warnings, instead of all log modes. 98-07-07 bench Fixed bug 5959: self-reg errors are now ship errors, and will have the button options in ship Darwin. ----------------------------- Release 0.10.00.4307 ----------------------------- 98-07-07 tracyf For bug 2721, We now honor the "NoDrives" policy, under the key "HKCU\Software\Microsoft\windows\CurrentVersion\Policies\Explorer". The number stored under the "NoDrives" value is treate as a 26-bit array, one bit for each drive (i.e. bit 0 = drive A, bit 1 = drive B, etc). For any bit that's set, we now hide that drive from the user in the Browse dialog, and prevent that drive from being selected as the root volume for TARGETDIR. The one exception is that if ALL local fixed drives are disabled, TARGETDIR will still default to the drive containing the Windows directory (regardless of whether that drive is disabled), and thus that drive will also appear in the Browse dialog. ----------------------------- Release 0.10.00.4306 ----------------------------- 98-07-04 malcolmh The RedirectComponent table is obsolete, and has been for a number of months. 98-07-03 t-caroln Fixed bug -- 5087 dealing with the cancel button during an MsiSpy install. On the action dialog, clicking cancel did not cause the install to cancel. The reason was not internal Darwin code, but a mis-authored package. The ControlEvent for this cancel button was missing!! And courtesy of Malcolhm's suggestion, ICE17 caught this error as well. Fixed by adding the ControlEvent for the Cancel button on the ActionDialog. 98-07-02 t-caroln VALIDATION -- new ICEs #21, 22. ICE21 validates that all components are mapped to a feature (in FeatureComponents table). ICE22 validates that the Feature_ and Component_ referenced in the PublishComponent table is an actual mapping listed in the FeatureComponents table. 98-07-02 chetanp fixed bug 5458 - We now prevent an older component (lesser keyfile) from overwriting an already DARWIN installed newer component (implying, if the file exists without having being installed by darwin - we go ahead and install the component irrespective of the version - since we cannot trust the previous install to be complete/ exact). 98-07-02 t-caroln Fixed bugs 4335 and 5913. Re-wrote CMsiView::Modify. Delete and Update can now be called after Insert and InsertTemporary. Seek now only requires primary key columns to be filled in. Formerly required all non-null fields to be filled in with dummy values + the primary key fields. ----------------------------- Release 0.10.00.4302 ----------------------------- 98-07-02 malcolmh Fixed bug 3794: AdminInstallFinalize needs to set the DISABLEMEDIA property during admin install if installing from compressed source 98-07-02 malcolmh Fixed bug 5786: USERNAME="" and COMPANYNAME="" do not suppress User Name and Organization field contents in Setup. We now have two new properties, NOUSERNAME and NOCOMPANYNAME. These will suppress our population of the USERNAME and COMPANYNAME fields. ----------------------------- Release 0.10.00.4302 ----------------------------- 98-07-02 malcolmh Fixed bug 5929: '*' log mode should not include 'v' 98-07-02 davidmck Fixed bug 5804: Using service again after a fatal error on the service side. We were not zeroing all the freed pointers, which caused problems the next time around. 98-07-02 davidmck Fixed bug 4943, DBCS command lines would not work previously. ----------------------------- Release 0.10.00.4302 ----------------------------- 98-07-02 chetanp bug 5924 - fixed "progids and viprogids not being written" problem. ----------------------------- Release 0.10.00.4302 ----------------------------- 98-07-01 bench Contrary to previous relnotes entries, verbose logging is not yet enabled at this time. Verbose debug output is though. 98-07-01 chetanp bug 5687 - remove component thrashing behaviour from darwin 98-07-01 tracyf For bugs 5690 and 5861, verbose logging of all final feature/component states, and of all file version checks (in order to determine whether to overwrite existing files) has been added. 98-06-29 johndelo Completed update of MSI type library, per David Boctor. ProgId is WindowsInstaller.Installer - note change! For debug-only access, WindowsInstaller.Debug Old definitions will remain as well until 7/7/98 to give time for update of test and documention. Advise to uninstall or unregister old MSI version. Interface GUIDS for OLE automation have changed. Strong typing of objects and method completion now work with MSIin VB and VBA. For object model, use object browser, oleview.exe, or AutoApi.cpp. Nearly all public API functions are now exposed. Help string have been removed too save space, as is conventional, but are left in for DEBUG build. Same story with context IDs on enumeration value. 98-06-29 malcolmh Fixed bugs 5847, 5856, 5857, 5811. Fixed a bunch of API call that didn't allow a null buffer to be specified in conjuction with a non-null buffer count parameter. Ex: MsiDoThis(szProduct, 0, &pcchBuf). This call would typically be followed by a call like MsiDoThis(szProduct, szBuffer, &pcchBuf) 98-06-29 malcolmh Fixed bug 4983: Suggestion: Could MsiZap add a command line argument to take a product code. We can now remove a single product's information with the 'T' option. 98-06-29 malcolmh Fixed bug 5721: Logging: Need to add function calls and parameters to debugmon output 98-06-29 malcolmh Fixed bug 5797, 5582. The feature cache is now per-process. 98-06-29 chetanp bug 5858 - fixed darwin to NOT ignore assigned transforms at first run 98-06-29 bench Bugs 5860 and 5862: several changes to improve logging and diagnostic output: 1) a registry value can be used to turn on logging. the value is: HKLM\Software\Policies\Microsoft\Windows\Installer Name: Logging Value: REG_SZ, log mode ("ifpmcuewar") 2) new log mode: 'v' for "verbose". Currently this log mode triggers all debug output to be written to the log, in both ship and debug Darwin. More information will be written in the future when this mode is set. 3) a registry value can be used to switch on different levels of debug output in ship or debug Darwin. the value is: HKLM\Software\Policies\Microsoft\Windows\Installer Name: Debug Value: REG_DWORD value & 0x1: debug output is turned on (default is off for ship, on for debug) value & 0x2: "verbose" debug output is turned on 98-06-29 t-caroln Validation. ICE18 -- fixed bug 5684. Required to be updated from < 32 char to < 64 char due to Bench's fix of bug 5678. 98-06-29 malcolmh Fixed bug 5866: Cached transforms are not deleted upon uninstall. 98-06-29 malcolmh Fixed bug 5665: Maintenance mode fails when a product has run from source transforms 98-06-28 malcolmh Fixed bug 3998: Local caching path should include product code or something unique per product. We now place transforms and icons in per-product directories named with the product code of the product. 98-06-28 malcolmh Fixed bug 5247: Crash in version.dll when calling GetFileVersionInfo for currupt dll on NT4 - need workaround 98-06-27 malcolmh Fixed bug 5703: Should invalidate RFS features when the server is down, regardless of Client Side 98-06-27 malcolmh Bug 5658: We now have a policy value for logging. Set the Logging value to any combination of our log characters and we'll generate a log using these modes. Command-line log flag or MsiEnableLog both override this policy. 98-06-27 malcolmh Fixed bug 4042: Calling MsiGetComponentPath on a registry keypath no longers returns a 50+ offset for RFS keys. 98-06-26 chetanp fixed bug 5699 - we now place the cached icons/ transforms under the APPDATA folder on Win9x as well, if present. This fixes roaming scenarios where the APPDATA folder is defined. If the folder is not present, we do what we always did - place it under the Windows folder. 98-06-26 tracyf The following new properties have been defined: PRIMARYFOLDER: A global property that allows the author to designate a "primary" folder for the installation. The value given to this property must be the key name of a directory record found in the Directory table. The installer will use the resolved path of this folder to determine the volume used when setting values for the PrimaryVolumePath, PrimaryVolumeSpaceAvailable, PrimaryVolumeSpaceRequired, and PrimaryVolumeSpaceRemaining properties. PrimaryVolumePath: The Installer sets the value of this property to the path of the volume designated by the PRIMARYFOLDER property. For example, if the folder referenced by PRIMARYFOLDER resolves to "D:\ProgramFiles", PrimaryVolumePath will be set to "D:" PrimaryVolumeSpaceAvailable: The Installer sets the value of this property to a string representing the total number of bytes available, in units of 512, on the volume referenced by the PrimaryVolumePath property. For example, if PrimaryVolumePath is set to "D:", and volume D: has 446,134,272 bytes free, PrimaryVolumeSpaceAvailable will be set to 871356. Note: if this value is to be displayed within a static Text control, the new FormatSize style bit (see below) can be used on the control to automatically format and label this number in units of KB, MB, or GB as appropriate. This goes for the other properties below as well. PrimaryVolumeSpaceRequired: The Installer sets the value of this property to a string representing the total number of bytes required by all currently selected features on the volume referenced by the PrimaryVolumePath property. As with the PrimaryVolumeSpaceAvailable property, this number is expressed in units of 512 bytes. PrimaryVolumeSpaceRemaining: The Installer sets the value of this property to a string representing the total number of bytes that would be remaining on the volume referenced by the PrimaryVolumePath property, if all the currently selected features were to be installed. As with the PrimaryVolumeSpaceAvailable property, this number is expressed in units of 512 bytes. The following new Control style bit has been defined: FormatSize Control Style Bit: Decimal: 524288 Hex: 0x00080000 If this bit is set for a static text control, the control will automatically attempt to format the displayed text as a number representing a count of bytes. For proper formatting, the control's text must be set to a string representing a number expressed in units of 512 bytes. The displayed value will then be formatted in terms of kilobytes (KB), megabytes (MB), or gigabytes (GB), and displayed with the appropriate string representing the units Here's an example of the formatting resulting from use of the FormatSize style bit: Assume the text of a static Text control is defined in the Control table to be [PrimaryVolumeSpaceRequired]. At runtime, the installer will resolve this property to the total number of bytes required for the install, in units of 512. If the total bytes required resolved to, say, 18,336,768, the value for the PrimaryVolumeSpaceRequired property would be set to "35814" (18336768 / 512), and the number would be displayed in the control as "17MB". 98-06-25 malcolmh Fixed bug 5180: Crash running Unicode Darwin with Advertised Msispy install. 98-06-25 malcolmh Fixed bug 4441: MsiGetProductInfo should accept DD where a ProductCode is required. 98-06-25 malcolmh Fixed bug 5619: Performance:MsiUseFeature should be able to avoid feature validation. We now have a new api: MsiUseFeatureEx that can take INSTALLMODE_NODETECTION which disables keyfile detection. 98-06-25 malcolmh DEV: Added ability to unload a late-bound DLL. Syntax: DLL::Unbind(). Ex: OLE32::Unbind(). 98-06-25 chetanp fixed bug 5844 - fixed incorrect reg keypath registration for registry records with special tokens (+, -, *) 98-06-25 johndelo Updated automation type library per David Boctor specs. Old definitions will remain as well until 7/7/98 to give time for update of test and documention. ProgIds and descriptions have been changed: WindowsInstaller.Application & WindowsInstaller.Debug Typelib name and version have changed: WindowsInstaller = Microsoft Windows Installer 1.0 Object Library Internal automation version also changed to 1.0 Enumerations now all begin with "msi". Following current convention, help strings have been removed to save space in the dll. Help IDs still present. For current values, use typelib in Msi.DLL or consult the end of the source file: AutoApi.cpp. 98-06-25 t-caroln Fixed bug 5841, Validation. In order to ensure all GUIDs work correctly (particularly after compression), they need to all be UpperCase. The GUID category validator now validates that the GUIDs are indeed all upper case. The msispy and msival2 msi's had to be updated in order to validate correctly. 98-06-25 bench Fixed bug 5820. The LIMITUI property caused properties set on the command line to not be processed. 98-06-24 malcolmh Fixed bug 5814: Cancel button flashes in basic UI. 98-06-24 malcolmh Fixed bug 5776: Network resource dialog has an accelerator key that fails to work. 98-06-24 malcolmh Fixed bug 5716: Should notify the shell whenever application state changes. 98-06-24 malcolmh Fixed bug 3799: Make sure all environment variables are expanded in the context of the user. 98-06-24 chetanp bug 4299, 4330 fixed. - we now have the additional restriction that the RegisterProgIdInfo, RegisterMIMEInfo are after the RegisterClassInfo and the RegisterExtensionInfo actions and the UnregisterProgIdInfo, UnregisterMIMEInfo are after the UnregisterClassInfo and the UnregisterExtensionInfo actions. This is in accordance with the current recommended sequence. ----------------------------- Release 0.10.00.4224 ----------------------------- 98-06-24 bench Patches created by a build prior to 4224 will not work with 4224 and beyond. All patches must be recreated. This incompatibility is caused by a change in the file format for patch files. 98-06-23 t-caroln Fixed bug 5812 -- Tools now use _stprintf (compiles to sprintf and wsprintf depending on UNICODE). wsprintf only works up to 1024 bytes, which could fail to copy everything for some tools. Tools affected were: msialter, msidb, msidiff, msifiler, msiinfo, msimerg, msitran, msival, and msival2. 98-06-23 t-caroln Fixed bug 5647 -- As per chetan's fix for 4512, AnyPath can be LFN (SPN|LPN). Validation now handles this case. 98-06-23 t-caroln Fixed bug 4010 -- msitran -v option not work when transforming an emptydb to a fulldb. This actually wasn't a "real" error, but if the user used the fulldb as the db in the msitran -v argument list, then we wouldn't handle it correctly (# primary keys and columns would double). Now, it is handled correctly. However, the emptydb should have been used as the base. 98-06-19 t-caroln New ICE's -- 17 (bug 5773), 18(sort of bug 3317), 19 (bug 3317) Updated ICE02 to include the ODBCDataSource table check ICE17 -- validates ControlType dependencies in the Control table for the Bitmap, Icon, ListBox, ListView, ComboBox, RadioButtonGroup, and PushButton control types. ICE18 -- validates KeyPath column of Component table if KeyPath is NULL (Directory refernce). ICE19 -- validates advertising. Class,TypeLib,Extension,PublishComponent,Shortcut tables must reference Components with a ComponentId. All but the shortcut table must reference components with File KeyPaths. The Shortcut can also reference a Directory KeyPath. 98-06-19 mattwe 5635: Improved location of autoexec.bat for UpdateEnvironment on Win95. You can use WIN95_ENVIRONMENT_TEST to override our detection. We look first to the windows volume, then search all fixed disks for config.sys, and lastly fall back to the windows volume. There's more that can be done, but for very little return. 5769: Fixed a caching problem with the path object. If you call GetFilePath with a file, change some other part of the path, and then call with the same file, you will get spurious results. This affects nearly every path method. 98-06-19 davidmck Made a number of performance improvements. The trickiest is that we try to estimate the cost of the script and only compute the exact cost if we really need to. The definition of "really need to" is when the install without the script will fit, but the install with the maximum script for the database does not. Testing in cases where we are near the edge would be interesting. Our "exact" script cost is also an estimate, but a more precise estimate than our guess, so you can probably still get some border cases where we don't install and you might have just enough space, but likely you couldn't use the product then. 98-06-18 bench Bug 5752: We now return ERROR_INSTALL_PACKAGE_VERSION from MsiAdvertiseScript and MsiProcessAdvertiseScript when the script passed in has an unsupported script version. 98-06-18 malcolmh Fixed bug 5748: AF in istring.cpp line 1123 98-06-18 mattwe 5729: You can now put environment variables on the command line again, with %VAR=Foo. A previous bug was to assure that all properties started with an alphanumeric character, and busted this. 98-06-18 malcolmh Fixed bugs 5742. We now assert if you don't declare your DLL custom action __stdcall. 98-06-18 mattwe 5629 Fixed a debug only crash with long command lines. We now resize the buffer on the fly for the offending debug string. However, it will still truncate at 1024 character and give slightly wacky output. Increased the maximum length for a property value to 1024 characters, and cleaned up the code to ease increasing it further if needed. 98-06-18 andrewh 5750, Couldn't uninstall office9, Assert "Cursor not reset", new error checking caught a case of a cursor being used before the previous user reset it 5735: CustomAction cannot reference File table on uninstall, this fix affects FormatText so it can now reference files in components whose states are either not changing or are scheduled for removal. The author should condition CustomActions, author components appropirately to not use a file after it has been deleted. 5746,5747 - Don't list msiexec in the FilesInUse list, list the correct file that is in use in the log. 98-06-18 mattwe Bug 4278: MoveFile no now longer fails if the full file attributes cannot succesfully be copied. This typical case is that the file has security such that we can't access them. 98-06-18 bench Bug 5678: as values in the RunOnce key must have names < 32 characters, we no longer use the product name in this field. Rather, the product code is compressed and truncated to provide an almost-unique name that is < 32 characters. 98-06-18 bench Bug 5644: add the ability to detect products in a range of versions using the Upgrade table and the FindRelatedProducts action. Previously, you could only use the Upgrade table to detect a product whose version is greater than or less than a single version. Now, you may supply a range of version of the syntax "X.X.X.X:X.X.X.X" where the ':' seperates the two. The Operator column value is interpreted differently when this syntax is found. Now, adding a 2 to the value means the lower version is inclusive, and adding a 4 means the upper version is inclusive. The two versions are exclusive by default. ----------------------------- Release 0.10.00.4218 ----------------------------- 98-06-17 t-caroln Added MsiDefs.h to the Headers target. This copies the file from the %DARWIN%\src\inc to the %COMMON% folder in the build directory so that the tools can use them. (%DARWIN%\src\inc is not an Include path for the tools). 98-06-17 t-caroln Fixed bugs 5727, 5728 -- Validation. Validation was returning the wrong error code (NotInSet) for OverFlow and UnderFlow errors. Changed to return the correct error codes. ----------------------------- Release 0.10.00.4217 ----------------------------- 98-06-17 malcolmh Fixed bug 5656: Custom Action hang darwin when trying to send messages to update progress 98-06-16 bench Fixed bug 5715: assert when patching run-from-source install. 98-06-16 bench Changed the versions for all Darwin files, moving the build number from the fourth field to the third. This will allow future "letter" builds like 4127a to be given a new version, like 0.28.4127.1. 98-06-16 tracyf Per bug 5685, the ReserveLocal and ReserveSource columns of the ReserveCost table are now non-nullable. Since the original schema was wrong (and outrageous disk space calculations are the resullt if these columns are left Null), a schema version change is not called for. 98-06-16 tracyf In response to bug 5643, the disk cost values displayed in the UI for features have been changed. The values displayed now represent the total cost attributable to the feature *after the install is complete*, i.e. without taking rollback into account. For example, in previous versions of Darwin, if a feature is installed on first-run, and then the install is launched into maintenance mode, the disk cost for that feature would always show up as 0 if rollback is enabled, regardless of whether the feature is selected for removal or not. Now, the displayed disk cost will reflect the disk space that will be freed up after the removal is complete and the rollback files are removed. 98-06-15 bench Fixed bug 5705: the end dialog displayed when /q+ is used contained the string "1: 32" using ship Darwin. It now displays the error strings 32 or 33 from the Error table correctly. 98-06-15 t-caroln Bug 4938 -- Validation. Updated the fix. The code for CustomSource was commented out after this bug due to its incorrect validation of nested install CAs. I've uncommented the code and changed it to work correctly for other CAs. The validation of the nested install CAs is left to the custom validator (one of the ice's). 98-06-12 t-caroln Fixed bug 4791 dealing with filename validation. The filename validation code has been consolidated into one function. Both Services and the internal Validation code use it (thus preventing duplicate copies of the same source code). 98-06-12 tracyf Fixed bug 5413. For child features in the advertised state, when the parent changes from the Local state to the Source (run from network) state, the child feature(s) now also go the Source state. If the parent is changed back to Local, the children will go back to advertised. 98-06-12 tracyf Fixed bug 4787 - the FileName column of the RemoveFile table has been fixed to properly accept shortName|longName syntax. 98-06-11 t-caroln Bugs 5661, 5684. Validation. 5661 -- Version string validator works with MergeModule tables and will work in any table provided you have a Language column called "Language". This maintains Darwin's versioned file scenario where all versioned files must have a langauge. 5684 - ProductName can only be 31 characters max. Custom validator. ICE16 98-06-11 t-caroln Fixed bugs 4813, 5670, 5671 -- custom validators. One if for circular references between MIME and Extension tables, one if for Dialogs listed in the *ExecuteSequence tables, and one if for root feature parents with the ifrsFavorParent bit set. 98-06-11 t-caroln Fixed Bug 5521, added a new URL validation type.. 98-06-11 malcolmh Fixed bug 2858: Transforms: Adding an existing table to DB fails even when flagged to treat as warning (ignore) 98-06-11 malcolmh Fixed bugs: 5569: "Preparing to install" string should be moved into the new localizable resource 5570: Need to update the error strings in the msi.dll resource for clarity 5572: Basic UI - strings need to be removed from the dialogs and placed in the localized resource 5180: Crash running Unicode Darwin with Advertised Msispy install. 5611 Should remove backward compatability with <1800 NT ----------------------------- Release 0.10.00.4211 ----------------------------- 98-06-11 mattwe /o property support is now completely removed. 98-06-10 t-caroln Bug 5657 -- fixed validation of SFN and LFN (disallowing some char when we should allow and allowing others when we should disallow) 98-06-10 chetanp Due to the nonexistence of common shell folders we now ignore the ALLUSERS property for Win9x platforms ----------------------------- Release 0.10.00.4210 ----------------------------- 98-06-10 tracyf Bug 4775: support for a new attribute bit has been added to the Attributes column of the Feature table. The description of the bit to be incorporated into the help file is: "The 6th bit is the ifrsNoUnsupportedAdvertise bit. If this bit is set for a particular feature, advertising will be disabled for that feature if the operationg system shell the product is being installed on does not support Darwin descriptors". 98-06-09 bench Fixed bug 5616: upgrades or patches in which the InstallExecuteSequence contained the InstallExecute, RemoveOldProducts and InstallFinalize actions, in that order, caused an assert and crash. This has been fixed. 98-06-09 davidmck I changed how InstMsi copies the files to use CopyFile rather than LZCopy. LZCopy was randomly failing on some machines (Bug 5622) and we don't need it so CopyFile seems better. 98-06-09 tracyf Fixed bug 4287. We now automatically retry network failures once during file copying, before putting up the retry dialog (during quiet installs, we retry once before failing and rolling back). If the network failure occurred while reading or writing an open file, we also now close the file and re-open before retrying. 98-06-09 bench Fixed bug 5598: "Unexpected Error 2203 running merged nested install". This bug exposed the fact that when caching the msi in %windows%\installer, we were copying the temp copy of the msi from %temp% and not from the source. The fix for this bug was to copy the msi from the source instead. 98-06-08 malcolmh Fixed bug 2147: Incorporate Shell Support independant of OLE support. We have 2 new properties: OLEAdvtSupport ShellAdvtSupport 98-06-08 t-caroln Added a new target to the makefile -- msival2. This builds msival2.msi, evalcom.dll, msival2.exe, and darice.cub. I have also added msival2.msi to be released in the Samples folder. It contains conditionalized components. The evalcom.dll ANSI version is installed on the Win9X systems and the UNICODE version is installed on the Winnt systems. 98-06-08 bench Fixed bug 5604: the packages simple.msi, minimum.msi, schema.msi and template.msi where all made platform-independent by changing the suminfo property 7 from "Intel;1033" to ";1033". 98-06-08 andrewh 5612 - Fix ship Network Resource dialog, the line to read the path from the editbox was debug-only, causing us to display garbled characters in an Invalid Path messagebox... (bug 5521 fixed by this as well) 98-06-08 bench Fixed bug 5597: some errors (those generated directly from the actions) where not using the error strings from the Error table. They now do. 98-06-08 bench Fixed bug 5615: we now do not bind files (with BindImage) that we do not install. Most likely files we don't install because they have equal or newer versions have already been bound, so this is a slight performance gain. 98-06-05 t-caroln Validation bugs -- 5107, 5613. Fixed. 5107 dealt with removing obsolete test for '@' in Cabinet category. 5613 was adding iveBadFormatted as a case for the MapError function in the API. 98-06-05 chetanp bug 5588 - change to skip type library registration when going from advertised to advertised after reboot. 98-06-05 bench Fixed bug 5617; we were calling lstrlen on a null pointer in MsiConfigureProduct which sometimes AV'ed. We don't do this anymore. 98-06-04 bench Fixed bug 2406: embedded cabinets where being stripped from admin packages, since the admin source is always uncompressed. Now, the size of the package is also reduced to reflect the missing streams. This code change effects database caching as well, as to two features now share the code that strips cabinets. 98-06-04 chetanp bug 5579 - changed CMsiEngine::SetFeature's logic for setting the fNeverTrackParent variable. 98-06-04 tracyf Bug 5116: For MsiGetFeatureCost, the MSICOSTTREE_PRODUCT constant is unsupported, and has been removed from msiquery.h and the help file. 98-06-04 tracyf Fixed bug 5253 - we can now extract zero byte files from cabinets embedded in an MSI stream. 98-06-04 tracyf Fixed bug 4374 (slimmed down the basic UI dialog). 98-06-03 malcolmh Fixed bug 5574: Creating a shortcut on a network drive causes Assert. The assert was incorrect. 98-06-03 malcolmh Bug 5342: AD: Self registering DLL-s cannot be configured to run with elevated priledges. We now self-reg elevated for managed app, and impersonated otherwise. 98-06-03 malcolmh Fixed bug 5505. MsiProvideComponentFromDescriptor no longer uses the feature cache. This doesn't affect any of the other MsiProvide* functions. 98-06-03 t-caroln Added -Z option to msival2.exe. When using this option, you can ignore specifying the evaluation file as the -Z means to use the latest darice.cub file which is available off the Iceman website. Syntax is then msival2.exe {database} -Z. Note, msival2.exe will soon be released once evalcom.dll is ANSI enabled. 98-06-03 t-caroln Fixed bug 4035 which Validates Type 35 and 51 CustomAction usage. This is available as Ice12. Currently the only site to access it is at the Iceman website. ----------------------------- Release 0.10.00.4203 ----------------------------- 98-06-02 malcolmh Fixed bug 2477: Need to clean up verbs in the explorer. The verbs now display correctly. 98-06-02 mattwe We now assert with a message when we have a /O (old property format) in the command line. It still continues to work if you ignore the assert, but the tests and CAs *should* be up to date by now. 98-06-02 chetanp changed font version handling - we now allow font version strings to be of a more generic form - [text][ OR colon>][ OR OR OR ][text] 98-06-02 tracyf The Installer now displays a progress bar during the final costing/script compilation phase. Previously, an empty progress bar would sit on the screen for up to 2-3 minutes (or longer) before the actual script execution begins. Now, the progress bar will run to completion, indicating the end of the preliminary phase, and then will start again for script execution. In avoid misleading the user, a new ScriptInProgress ControlEvent has been added, which allows a special explanatory string to be displayed during the first progress bar. The same text control in the EventMapping table that subscribes to the TimeRemaining ControlEvent should also subscribe to the ScriptInProgress ControlEvent, with "ScriptInProgress" as the name of both the Event and the Attribute. In addition, the string to be displayed should be added to the UIText table, also with the name "ScriptInProgress". For instance, in the template MSI, this string was added with the text "Gathering required information...". If executing with Basic UI, the "ScriptInProgress" string is pulled from the error table (new error string 21), and is automatically displayed at the appropriate time. For existing databases, this new error string should be added (simply no string will be displayed if it is not found). 98-06-02 tracyf Fixed a number of bugs related to the "time remaining" indicator on the progress dialog. First, while more than 60 seconds are estimated to remain for the install, the "time remaining" now updates every 15 seconds, and displays only "xx minutes". Once the time remaining drops below 60 seconds, the display updates every second, and displays only "xx seconds". Note that for this to display properly during full UI, the TimeRemaining string in the UIText table needs to modified in existing databases, to this form: "Time remaining: {[1] minutes }{[2] seconds}" (this modification has been made in the standard template MSI). Also, other problems, such as negative time values, and time estimates becoming skewed when alerts are displayed, have been fixed. 98-06-01 malcolmh Fixed bug 5536: MsiGetComponentPath doesn't handle the case when lpPathBuf==0 and pcchPathBuf != 0 98-06-01 t-caroln Fixed bug 5553. This bug was caused by the fix for bug 5534. Now we use a class to ensure that the View and Stream are released in the correct order (View must be last). Also this encapsulates all of the releasing that has to be done. All of this occured in the FindAndRunAction code and was related to custom actions. 98-05-29 malcolmh Fixed bugs: 3927 Multiple but incompatible flags are valid for Version checking on transforms 3945 need a new transform validation constant: itvUpgrade 98-05-29 bench Fixed bug 5310: added a new bit for the Upgrade.Operator column: DetectOnly. Adding this value (32) to your operator column value will cause the detection in FindRelatedProducts to kick in, but will disable any action taken by the PreventInstall or RemoveExistingProducts actions. 98-05-28 malcolmh Fixed bug 5094: Assert when system environment variable is blank. We now zap any blank environment variable entries. 98-05-28 eugend Two bug fixes in the handler changed the UI's functionality: - bug # 5399: disabled Text controls were displaying their text as normal text. I've changed this as to display the text grayed-out. - bug # 4783: the Text control wasn't able to display '&', but was displaying then next character underscored. I've added the NoPrefix Text control style (hex value = 0x20000, decimal = 131072). If present, the text control displays the '&' character "as is". 98-05-28 malcolmh Fixed bug 3926: MsiTran needs arguments for setting flags for validation of language, product and platform 98-05-28 malcolmh Fixed bugs: 3983: Asserts when disconnected from network 4538: Back command makes Darwin exit without alarm messages when network connection is broken We now always temporarily cache the MSI, whereas we used to cache only when installing from removable media. 98-05-28 bench Fixed bug 5515: a new property was added: ReplacedInUseFiles. This property is set in the InstallExecute and InstallFinalize actions whenever we install over an existing file that is in-use. 98-05-28 tracyf Added a new argument to the record fields for the MsiProcessMessage API, which now allows additional ticks to be added to the install progress bar (by CustomActions, for instance). The new argument will be documented in the help file soon, but until then, here are field definitions when eMessageType is specified as INSTALLMESSAGE_Progress: Field 1: Subclass - this field determines the type, or subclass, of progress message being sent. The content of the remaining fields is dependent on the subclass type, as shown below. The allowable values in field 1 are: [0] - MasterReset - resets the progress bar, sets the total number of expected progress ticks [1] - ActionInfo - provides information related to progress messages to be sent by the current action [2] - ProgressReport - increments the progress bar [3] - ProgressAddition - allows an action (such as a CustomAction) to add ticks to the overall expected progress total. Field 2: (Dependent on subclass type, as follows): [if MasterReset] - the total number of expected progress ticks for the whole progress bar [if ActionInfo] - the "PerTick" value: the number of ticks per ActionData message for the current action, if no explicit ProgressReport are being sent (see field 3 below). This field is ignored otherwise. [if ProgressReport] - the number of ticks by which the progress bar is incremented [if ProgressAddition] - the number of ticks to add to the overall expected progress total Field 3: (Dependent on subclass type, as follows): [if MasterReset] - the direction to fill the progress bar, one of two values: [0] - forward (left to right) [1] - backward (right to left) [if ActionInfo] - the progress "type": one of two values: [0] The current action will send explicit ProgressReport messages [1] Increment the progress bar by the "PerTick" value (see Field 2) each time an ActionData message is sent [if ProgressReport] - Unused [if ProgressAddition] -Unused 98-05-27 bench Fixed bug 5305: several upgrade actions have been renamed to more closely resemble what they really do. Note that the old action names will continue to be supported indefinitely, but only the new names will be documented. Specifically, the old and new action names are: BlockInstall --> PreventInstall MigrateFeatureSettings --> MigrateFeatureStates RemoveOldProducts --> RemoveExistingProducts 98-05-27 bench Fixed bug 5448: MsiCreateTransformSummaryInfo will not fail if the ProductVersion property value is greater than 13 characters. We technically support any length product version, as long as the first 3 fields contain 8 or fewer digits. 98-05-27 malcolmh Fixed bug 4985: We now support the log mode character '*' which represents all log modes. ex: msiexec /I foo.msi /L* log.txt 98-05-27 malcolmh Fixed bug 4517: SOURCEDIR should be a private property 98-05-27 malcolmh Fixed bugs: 4441: MsiGetProductInfo should accept DD where a ProductCode is required. 4442: MsiConfigureProduct should accept DD. 4443: MsiQueryProductState should accept DD. 98-05-27 malcolmh Fixed bug 3090: DARWIN, MsiAdvertiseProduct returns error 12 if language id of package does not match the system. Behavior is now: - If i pass a specific language: - if the pkg supports that language, use it - if the pkg does not support that language, fail. - If i pass null for the language argument: - use the default language for that pkg ----------------------------- Release 0.10.00.4127 ----------------------------- 98-05-27 tracyf For bug 5395, added code to estimate the disk cost of the install and rollback scripts (which can get large for an install such as Office), to help prevent problems when installing or uninstalling with very little disk space available. ----------------------------- Release 0.10.00.4127 ----------------------------- 98-05-26 johndelo Component.ComponentId has now been restored to nullable, in order to support removal of old versions, obsolete files and reg entries, and temp files such as help indexes. Components with no ID will not be registered and thus cannot be used for advertising or when uninstall is needed. 98-05-26 mattwe We now invalidate the feature cache between log-offs. 98-05-26 mattwe Synchronous custom actions now use the old message pump to work around an OB1 bug. (repro steps in #5519). We still need to look at all this and get it right. 98-05-26 mattwe SCHEMA CHANGES: IniFile.Directory_ has now been changed to IniFile.DirProperty. Bugs #5250, #5354 Component.ComponentId is now nullable, per JohnDelo. Validation fixes are in. Class.AppId is now Class.AppId_. This is a foreign key to the AppId table. AppId table has been added, per Rob's specs. Bug #5480. This is being included in the unreleased 0.28 schema changes. Full backwards compatibility to 0.27 98-05-26 bench Fixed bug 4451. We now support displaying an "End Dialog" on success or failure in basic UI mode or quiet mode. To enable this dialog, add + to the /q option on the msiexec command line, or include a flag in the INSTALLUI_LEVEL passed to MsiSetInternalUI. Note that this dialog is not displayed when a reboot is required. In quiet mode, we reboot automatically, in basic UI mode, the "you need to reboot" dialog replaces the end dialog. 98-05-22 t-caroln Fixed bugs 3077, 5005, and 5477 for validation. 98-05-21 chetanp bug 4792 - We now doubly refcount the key file of components, if the key file exists w/o being refcounted AND the icsSharedDllRefCount flag is set for the component. ----------------------------- Release 0.10.00.4121 ----------------------------- 98-05-20 bench Fixed bug 5378: We are now more strict about multiple threads using the per-process global messaging object at the same time. If more than one call is made to initialize the message object, the second will fail with ERROR_INSTALL_ALREADY_RUNNING. For example, attempting to run two installs or an install and an advertisment in the same process will not be allowed, with the second install/advertisement failing. 98-05-20 malcolmh Fixed bug 4998: We now cache feature detection information 98-05-20 malcolmh Fixed bug 5487: Darwin now works on NT5 builds < 1800. 98-05-20 bench Fixed bug 5476. ForceReboot now uses the product code on the command line instead of the path to the source msi if possible. This will happen in the ForceReboot action is after RegisterProduct and PublishProduct. As a result, we will not require the source to be present to access the msi if the product is registered before the reboot. 98-05-20 andrewh fixed 5491: ProvideComponent repair copies too much when installstate_broken: its call to MsiReinstallFeature would reinstall equal files, changed the offending bit from REINSTALLMODE_FILEEQUALVERSION to REINSTALLMODE_FILEOLDERVERSION 98-05-20 andrewh 5359: Raised the shell version required for Darwin shortcut/descriptors to be the IE4.01SP1/Win98 shell (4.72.3110). 98-05-20 davidmck When we open a docfile, we now see if it's open across the network and if so, tell services not to let the system powerdown. Services keeps a count of the number of times it's been called and will clear the thread state when the counter gets back to its initial state again. We also tell services not to power down when we're actually running an insta.. 98-05-19 t-caroln fixed bug 3331 -- added ice12. Validates the circular references between components and files and components and registry keys. Go to http://robmen2 and click on ICEMAN to test it out. 98-05-19 malcolmh Fixed bug 5293. We have changed the cached MSI location and the location where we store tranforms in the user profile. We now use %WINDOWS%\Installer for per-machine data and {UserAppData}\Microsoft\Installer for per-user data. As a consequence of this change, we have a slight modification to our transform registration scheme. This change has no implications for users of Darwin. If the transform that we're registering is in a shell folder then we'll replace the shell folder path with "*ShellFolderId*", where the '*'s are literal. This is to support roaming. For example, you might see a transform registered as *26*Microsoft\Installer\1_2.mst. 26 is the CSIDL for the user's Application Data folder. We also now mark both of these folders as hidden, and we mark transforms and icon files read-only. MsiZap has been updated and will zap these new locations in addition to the old ones. 98-05-19 t-caroln fixed bugs 5455, 5456. Required updates of _Validation table to match help file. 98-05-19 chetanp to fix bug 5227 - needed to change the Progid table schema. bumped up the database schema version to .28. However we still support the older database versions. Also the script file version remains unchanged. 98-05-18 bench Fixed bug 5191. We now reboot automatically when necessary in a quiet mode install. In addition, the "Do you want to reboot now" message was changed from WARNING to USER. This means this question will no longer begin with "Warning 1702". 98-05-18 bench Bug 5367: "All internal errors should only have OK button". Before putting up an error message, we now detect if and when we don't have a template string to go with the error. If we do not, we restrict the buttons displayed to just . 98-05-18 t-caroln fixed bug 3897 -- trivial. Also updated testcab's validation table to match schema's except for the following columns where they differ: Feature.Directory_, Component.KeyPath, and File.File due to the old naming conventions of the cabinets. 98-05-18 eugend In the fix to bug # 3028, I've modified CMsiVolumeCostList, as to enable authors to set the column widths. The column width information can be entered into the control's Text column, right after the font specifications (if any). This information can be entered as a succession of positive integers enclosed between curly braces. A maximum number of 5 width specificators will be taken into consideration. Empty curly braces or {0} will cause the respective columns to be hidden. Reading the column width specifiers will stop under the following circumstances: - a negative integer or a string that cannot be converted into a positive integer has been encountered. - 5 width specifiers have been read. - there are no more width specifiers. If less than 5 valid, non-null width specifiers are present, the remaining columns will be hidden. I've also modified the default column widths as to better fit the columns into the given rectangle. I've modified the VolumeCostList control in TEMPLATE.MSI & TESTDB.MSI's DiskCost dialog as to have width specificators in its Text field. 98-05-18 t-caroln fixed bug 5430 -- Error exporting binary data from a table whose primary key is of type integer. Fixed by adding a new method to IMsiCursor called GetMoniker which handles computing the stream name. This method is open for testing in the msiauto api. In automation it is a read-only property of CAutoCursor called Moniker. See msiauto.hlp and bug for details on use. 98-05-18 malcolmh Fixed bug 5082: Storage CopyTo error when installing package with authoring error for file sizes. We now give an OODS error and allow retry. 98-05-18 malcolmh Fixed bug 5450: MsiAdvertiseScript should return error if we're doing a user assignment without impersonation 98-05-15 t-caroln Fixed bug 5362 -- when applying transform from command line return ERROR_FILE_NOT_FOUND if transform file not found and the Transform application error otherwise 98-05-15 bench Fixed bug 3632: "Darwin should log all failures to file even if logging was not turned on". If an error or warning occurs and logging is not turned on, we will create a log on the fly to contain the error message, and continue logging for the remainder of the install. The dynamic log is created in the temp directory and is called MSI*.LOG, where * is a set of random alpha-numeric characters. 98-05-15 mattwe Fixed Bug 4499: The UpperCase type in _Validation now works in tandem with any foreign key validation. The Feature.Directory_ column now must be both a foreign key to the Directory table, *and* UPPERCASE. (a public property.) 98-05-15 malcolmh Fixed bug 5341: The "preparing to install" dialog comes up with the network resource dialog even when we're not installing 98-05-14 mattwe Fixed Bug 5353: Validation now does no checking on foreign keys for the IniFile.Directory_ or RemoveIniFile.Directory_ This is to allow AppSearch to fill in properties as needed. Fixed Bug 4824: GetSelfRelativeSD automation fixes. 98-05-14 malcolmh Fixed bug 3794: AdminInstallFinalize needs to set the DISABLEMEDIA property during admin install if installing from compressed source 98-05-14 malcolmh Fixed bug 3774: AdminInstallFinalize needs to set the MEDIAPACKAGEPATH property during admin install 98-05-14 bench An added restriction has been made for the placement of the RemoveOldProducts action. This action may be placed in one of the following locations: 1) before InstallInitialize 2) after InstallFinalize 3) between InstallExecute and InstallFinalize, where no other installation actions are in the same range. 98-05-14 t-caroln Fixed bug 4461. Change was minor where changed the WriteLog calls to Message(imtInfo...) in the ValidateTransform code. 98-05-14 bench Fixed bugs 5083 and 5084, both of which dealt with backup files being left around in low disk space conditions. The fix for these bugs was more general: the CMsiFileCopy object will delete any files it has partially installed after an error or cancellation occurs. This is true for both compressed and uncompressed file copy. 98-05-14 malcolmh Fixed bug 5416: AV in PublishSourceList when DISABLEMEDIA=1 98-05-13 chetanp fixed bug 5318 - now we do not error if attempting to remove from a non existent inifile/ folder. 98-05-13 malcolmh Fixed bug 4929: SourceList creating duplicate entries 98-05-13 malcolmh Fixed network resource dialog bugs: 4801: Source dialog requires full path to MSI; doesn't allow just path to folder 4932: Network Resource dialog doesn't accept a directory path without a trailing backslash 4928: Inaccurate error message when sourcelist fails to find source MSI 98-05-13 mattwe We now cached the local system SID. It looks like the code intended to do this (sets a flag, saves the value in a static,) but the code never actually took advantage of either. 98-05-13 mattwe Bug 5374: Removed unused property "Registraton" (sic) from simple, testdb, and msispy. Fixed several other un-relnote-worthy bugs. See raid. 98-05-13 bench Fixed bug 4036: "Installation fails when TEMP environment variable not found" Our logic for locating the TEMP directory is hopefully final. We now do the following: If %TMP% is defined, we use that directory. Otherwise, if %TEMP% is defined, we use it. Otherwise, on 9X we use %windows%\temp and on NT we use %systemdrive%\temp. In all cases, if the directory does not exist, we create it. Note that from the service, we always use %windows%\msi as the temp directory. ----------------------------- Release 0.10.00.4113 ----------------------------- 98-05-13 chetanp Fixed bug 5398:We now support a new flag INSTALLMODE_NODETECT for the dwInstallMode argument in the MsiProvideQualifiedComponent and MsiProvideComponent APIs. This flag skips the component key path detection logic. Hence setting this flag will cause darwin to return success and the key path in scenarios where the component was installed but the key path was (externally) deleted. 98-05-12 mattwe Bug #5222: "SYSTEM" account is localized to another name on foreign systems. We've changed the security internals to recognize this special account, and look them up in a localization independent fashion. this will prevent the need for localizing the LockPermissions table. Bug #5283: Command line properties must now start with an alpha numeric character. This prevents the command line "Prop1=Value2" from being misinterpreted as a value name of "Prop1. People have commonly messed this up by simply removing the obsolete /o command line switch, without fixing the quotes. 98-05-11 malcolmh Fixed bug 5361: Transforms: Unable to cache transform if the full path is not passed on the command line 98-05-11 malcolmh Fixed bug 4249: Handler error running an .msi in UI mode when no UI tables are included. 98-05-08 mattwe Bug 4811: We now retry to download cabinets from the internet. Normally, if we can't find a file from source media, it's considered an authoring error/debug failure. However, the internet is a little more flakey, and there's a chance the file will re-appear. 98-05-08 mattwe Feature.Attributes now validates the exact set of allowable values. 98-05-07 mattwe Bug 2802: Set validation of integers never worked. We do now. Also, changed several Validators that were contiguous sets (0;1;2;3) to ranges. Updated ServiceControl.Event and Feature.Attributes to new sets based on the newly detected failures. 98-05-07 malcolmh Fixed bugs 4735, 2301: Feature usage metrics are now functional. We ACL the parent of the usage key so that Everyone can write to it. 98-05-07 malcolmh Fixed bug 4042: After configure TestDB to source, MsiGetComponentPath returns garbage for the component with regkey as KeyPath. We now handle registration of run-from-source registry keypaths correctly. 98-05-07 malcolmh Fixed bug 4117: Source dialog persists despite hitting Cancel 98-05-07 malcolmh Partially fixed bug 3983: Asserts when disconnected from network. We no longer assert, and we allow a retry, but we still get a storage.copyTo error at the end of the install. 98-05-07 tracyf Added the ability for the Installer to detect, if an out-of-disk-space condition is encountered, whether there would be enough disk space to complete the install if rollback were to be disabled. If so, the author now has the option to prompt the user whether to continue without rollback. Alternatively, the author can specify that the Installer should silently disable rollback and continue, or fail with the normal out-of-disk-space error. Implementation of this functionality involves two new properties (OutOfNoRbDiskSpace and PROMPTROLLBACKCOST), and a new control event (EnableRollback). TestDB has been updated to use these new elements (see the ControlEvent table), and new content describing them will be added to the help file. 98-05-06 malcolmh Fixed bug 5256: Need to make MsiGetComponentFromDescriptor append args. For MsiProvideComponentFromDescriptor we now quote the path and append the args. The argsOffset is now always set to 0. 98-05-06 malcolmh Fixed bug 5295: We need to change from using HKCU\{sid}. We now use RegOpenUserClassesRoot. This should have no noticable external effect. 98-05-06 malcolmh Fixed bug 5332: Need to use new SHGet API that takes a user token 98-05-06 andrewh 5193: UninstallString (s) no longer have the full path attached to msiexec.exe: office installs from network had their uninstall strings pointing to msiexec on the network [when darwin was ran from source to start the install] causing uninstalls to fail unless the network installpoint was available 98-05-06 bench Fixed bug 4702: "Assert in engine.cpp when service is not registered. Bad errors." If you run an install as a service, then with the service not registered, you will now recieve a nicer error message and no asserts. ----------------------------- Release 0.10.00.4106 ----------------------------- 98-05-05 johndelo Bugs 5040,5028 Custom action ignore return flag (+64) now also ignores execution errors or failure to load, but does not ignore authoring errors or crashes. When this flag is set, any errors are written to the log, but the execution continues as if no error occurred. 98-05-05 johndelo Bug 4706: MsiSetExternUI now remembers the old message filter and context when returning the previous handler. When the old handler is passed back with 0 for the filter, the cached values are restored. Old handlers may not be called directly via the pointer, but may be restored by passing it back to either the "A" or the "W" interface. 98-05-05 bench Fixed bug 5319. The Validation type for the Shortcut.Name column (specified in the _Validation table) was Text. This was changed to Filename. As a result, if you currently have any shortcut names that are not valid Filename's (aren't SFN|LFN for example) your package will fail to validate. 98-05-05 mattwe MsiInfo: will now give an error message for invalid integers, rather than setting a value of 0. (code review.) 98-05-05 mattwe Bug 5172: Services -- when a service fails to respond to a control event, we will automatically retry for 30 seconds. This will prevent most spurious errors from misbehaving services. Bug 4940: Services rollback -- When rolling back a service that has a user name, a failure to re-install will not result in a user error. We cannot recover the password for the service, so the rest of the rollback should continue. 98-05-04 bench Fixed bug 3851 in which transform validation of product versions was broken. This should work just fine now. 98-05-04 malcolmh Fixed bug 5284: Application Error when MsiAdvertiseScript(0, 0, 0, 0) is called. 98-05-04 malcolmh Fixed bugs: 5067: DOC:ixoSourceList opcodes parameters need to be updated in msiauto.hlp. 5075: DOC: ixoProduct opcodes have parameters that need to be added to msiauto.hlp. 4761: MsiProvideComponent(szProductCode, szFeature, unknownComponentID, 0, 0, 0) returns ERROR_INSTALL_FAILURE(1603) but actually installed szFeature. MsiProvideComponent and related functions now return ERROR_UNKNOWN_COMPONENT if the specified component is not in the specified feature. 4127: No way to trigger a launch condition based on the install type (ADMIN, ADVERTISE, vs INSTALL). The ACTION property is now set to the default action. 98-05-04 bench Fixed bug 5254: Added the ProductID property (with a value of "none") to the template.msi property table. Since the username and company are not registered by the RegisterUser action if the ProductID property is not set, the workaround to register these values for packages without ProductID's is to set this property to "none." 98-05-01 bench Fixed bug 3483: Files fail the scopes validation error because they have the wrong file version format. Validation now excepts file versions of the format XXXX.XXXX.XXXX.XXXX where X is a digit. 98-05-01 bench Fixed bug 2160: BindImage, UpdateResource, etc.. may not update installed file when old file is in use. If an existing file is in use and we install the new file to a temporary location, we will bind and update resources in the temporary file. 98-05-01 eugend I've added the Arial10 font into TextStyle table and the new DefaultUIFont property - set to Arial10 - into Property table. I've also changed the functionality in CMsiControl::ProcessText to use the font specified by the DefaultUIFont property, if present and no other font has been specified for a control. If the DefaultUIProperty is not defined, the fonts will be selected as they used to be. 98-05-01 bench Fixed bug 5128: RemoveIniFile.Directory_ field should allow a property to be used. The RemoveIniFile.Directory_ value need not be a foreign key to the Directory table anymore. This is similar to the RemoveFile.DirProperty column. The column name may be changed in a future schema version update. The _Validation table was also changed to reflect this (no longer a foreign key column). ----------------------------- Release 0.10.00.4030 ----------------------------- 98-04-30 bench Fixed bug 4635: Fixed. We now honor the official DisableRollback policy, and ignore the old "Disable" value under HKLM\SW\MSFT\Windows\CV\Installer\Rollback. 98-04-29 tracyf Support for the old "Directory_Configurable" column name in the Feature table has been removed. The newer "Directory_" column name is now mandatory. ----------------------------- Release 0.10.00.4028 ----------------------------- 98-04-28 malcolmh Fixed bug 5241: Apps don't show in ARP. The bug was in the UNICODE version of MsiEnumProducts. ----------------------------- Release 0.10.00.4028 ----------------------------- 98-04-27 malcolmh Fixed bug 4760: MsiProvideQualifiedComponent should return ERROR_INDEX_ABSENT on unknown qualifier. 98-04-27 malcolmh Fixed bug 4045: MsiProvideComponentFromDescriptor returns 1610 with valid DD, it should return ERROR_UNKNOWN_PRODUCT(1605) 98-04-27 malcolmh Fixed bug 3476: MsiQueryProductState returns INSTALLSTATE_ABSENT after MsiAdvertiseProduct. We now return 4 possible states: -INSTALLSTATE_UNKNOWN: the product is not advertised or installed -INSTALLSTATE_ADVERTISED: the product is advertised but not installed -INSTALLSTATE_DEFAULT: the product is installed for the current user -INSTALLSTATE_ABSENT: the product is installed for a different user 98-04-24 bench Fixed bug 5173: MsiCollectUserInfo was completely broken with various asserts and even an AV on NT. The code behind this API was essentially re-written to register the user information in a more direct way. It should be much less error-prone now. ----------------------------- Release 0.10.00.4024 ----------------------------- 98-04-22 bench Fixed bug 4977/5202: MsiEnumProducts will return ERROR_BAD_CONFIGURATION if a key name under HKCR\Installer\Products is the wrong size. In particular, this will catch product squids left over from older Darwin installs. 98-04-22 mattwe 4806: specifying /l on the command now will error if you don't specify a log file name. Reviewed major chunks of services and environment string handling in execute.cpp 98-04-22 bench Fixed bug 5184: MsiZap was not clearing the key HKCU\Software\Classes\Installer, which exists on NT 5. ----------------------------- Release 0.10.00.4021 ----------------------------- 98-04-20 bench Fixed bug 4922: Upgrade fails to remove old product information. This fix may have affected nested installs, especially source list and client registration. 98-04-20 malcolmh Fixed bug 5032: machine assignment fails to install 98-04-20 malcolmh Fixed bug 4262: Cannot advertise an alpha package on a x86 machine. MsiOpenPackage disables platform validation. MsiAdvertiseProduct disables platform validation when generating an advertise script. 98-04-20 mattwe 3944: Changed validation for Verb.Verb from Identifier to Text. This matches the help file. 98-04-20 chetanp bugs 5145, 3568 - changed MsiEnumComponentQualifier API to return exact Qualifier and AppData buffer sizes in case or ERROR_MORE_DATA. NOTE: This function has changed extensively. 98-04-17 bench Fixed bug 4519: Setup to create shortcuts in the common group, not personal group. The fix was to include all public properties that have been added or changed from their persistent values to the Properties value in the InProgress key. This ensures that all the options set by the user during the first half of an install are used after a reboot during the second half of the install. ----------------------------- Release 0.10.00.4017 ----------------------------- 98-04-17 chetanp fixed smoke test blockers - bugs 3597, 3640, 3697 ----------------------------- Release 0.10.00.4016 ----------------------------- 98-04-15 mattwe 4776: Validation no longer complains repeatedly when a column lacks a validation rule. It complains about each column once per database, rather than once per row. 98-04-15 andrewh 5009 - Shortcuts to a path with multibyte characters created wrong (TextSize->CharacterCount fix) 98-04-13 malcolmh Bug 4236: MsiServer methods no longer necessary/security risk possibility Automation changes: - Server/Conman.ValidatePackage has been removed - GetInProgressInstallInfo has been removed (it's now an engine method that's not exposed through automation) - RunScript has moved from Server to Conman 98-04-13 malcolmh Bug 4237: IMsiServer interface method Reboot poses a security risk Reboot has been removed from the MsiServer interface. It's now done in the Engine. If we're running a managed app then we'll Reboot with elevated permissions otherwise we'll reboot with user permissions. 98-04-13 malcolmh Bug 4168: Transform: When launch from current dir, transform causes assert without full path We now prepend the current directory to transforms that are specified via relative paths. This is accomplished by passing a private CURRENTDIRECTORY property from the client to the server. 98-04-13 malcolmh Bug 2275: mmode fails if cached db isn't found We now go to the source to get a new cached database if the cached one is missing. ----------------------------- Release 0.10.00.4009 ----------------------------- 98-04-09 johndelo Bug 5007: obsolete defines in msiquery.h, MSIMESSAGE_* have been removed. Use INSTALLMESSAGE_* defines instead. 98-04-09 bench Bug 5012: we now use the full UNC path of msiexec in the RunOnce key written by the ForceReboot action. This was effecting the Office install where they run Darwin from a network share and only install Darwin after the reboot. If the connection was not restored after reboot, the installation could not continue. 98-04-09 bench Bug 3676: we now continue logging after a reboot caused by the ForceReboot action. 98-04-08 malcolmh Fixed bugs: 5011: We should use HKCU instead of HKU\SID 5006: ODBC failure when called from MSI service Custom actions can now use HKCU directly instead of using HKU\SID. 98-04-08 tracyf Fixed bug 4966. Fixing this required that the Condition be processed BEFORE the installed states of features and components are determined (see the bug resolution for details). Thus, expressions in the Condition table can no longer include references to the installed states of features or components (even before this fix, references to installed states won't work in some instances anyway, for reasons related to the bug). The docs will be updated to call out this restriction. ----------------------------- Release 0.10.00.4008 ----------------------------- 98-04-07 bench Bug 4979. To help alleviate some of our timeout problems but also allow us to track down these issues easily, the following changes have been made: 1) the default timeout has increased from 20 to 60 seconds 2) a new policy value has been introduced to set the timeout value. this value is "Timeout" (DWORD) under HKLM\Software\Policies\Microsoft\Windows\Installer and is the number of seconds that the "worker" thread can go without pinging the UI before the "Installer not responding" dialog is displayed. ----------------------------- Release 0.10.00.4007 ----------------------------- 98-04-07 bench Bug 4961: add Admin install capability to MsiSpy. To facilitate this, all files (for both platforms) are now copied to each image on \\united\darwin and \\united\darrel. 98-04-06 mattwe Fixed part of 4944. Removed /o references from command line help. TESTING! This is your second relnotes note to remove /o from your tests. The next build released will have debug asserts enforcing this, and the next will have all support for /o removed. 98-04-06 malcolmh Bumped script version due to bug 4962 changes. 98-04-06 malcolmh Fixed bug: 4962: Need to update ARP properties and values Changed name: PWNOMODIFY -> ARPNOMODIFY PWNOREMOVE -> ARPNOREMOVE SupportURL -> ARPHELPLINK SupportPhone -> ARPHELPTELEPHONE Added: ARPAUTHORIZEDCDFPREFIX ARPCOMMENTS ARPCONTACT ARPINSTALLLOCATION ARPNOREPAIR ARPREADME ARPSIZE ARPSYSTEMCOMPONENT ARPURLINFOABOUT ARPURLUPDATEINFO The code now matches the registry spec. 98-04-06 mattwe Added IMPFAOW to latebind.h You can now use the IMPFAIL semantic for AORW imports. Also modified WININET and URLMON to be completely optional. (This wasn't quite working before.) ----------------------------- Release 0.10.00.4006 ----------------------------- 98-04-06 bench added a third public header: msidefs.h. This purpose of this file is to provide common data definitions to custom actions and authoring environments (users of msiquery.h). Currently this file contains the definitions for all exposed properties and the various values each integer column may contain. This file has been dropped to the COMMON folder along with msi.h and msiquery.h. 98-04-06 mattwe 4951. We now no longer attempt to set security on backup file directories on REMOTE volumes. This never worked, so the fix simply prevents the install from failing. ----------------------------- Release 0.10.00.4003 ----------------------------- 98-04-03 tracyf For bug 2985, Darwin error codes and messages have been totally revamped. Most messages that were previously ship messages (i.e. appear in the Error table and thus require localization) have been changed to debug-only. Only those messages that present understandable information to the average user have remained as ship messages. In doing this, we've reduced the number of messages in the Error table from 356 to 68. 98-04-03 mattwe 2823: New and improved command line parsing. TESTING/DOCUMENTATION: all references to the /o command line option should go away. The new method is to specify PROPERTY=VALUE at any point in the command line. To include spaces, use: PROPERTY="VALUE VALUE". For including a quote within a quoted string, use two quotes: PROPERTY="QUOTE "" QUOTE". In a non-quoted string, do not double quote. PROPERTY=QUOTE"QUOTE. The /o flag has been left in place for the time being to allow for backwards compatibility, but will slowly go away. See here or SETUPSUP for more details. 98-04-03 malcolmh Removed unused Regkey.RemoveSubKey method. 98-04-02 malcolmh Partial fix for bug: 2985: WORK ITEM: Fix error codes The error codes in database.h, iconfig.h, regkey.h, and services.h have changed. 98-04-02 malcolmh We now set the Timestamp field in the script header. The time stamp is an integer value whose high-order word is the DOS date, and low-order word is the DO time. 98-04-02 malcolmh Fixed bug: 2126: Work item: Remove ProgMan support This includes some opcodes, some services methods, and some actions. 98-04-02 chetanp we now always shared dll refcount all files that go to the system folder and doubly refcount any files that exist in the system folder w/o a shared dll refcount. 98-04-01 johndelo Changed GUID compression for registry data - Bug 4343 GUIDS now are stripped of punctuation and the bytes are reordered low-to-high order for best performance. GUIDS packed into MSI descriptors have not changed. PackGUID and UnPackGUID functions in RunScript.exe (as well as internal functions) now accept an enum to designate the compression to use: ipgFull = 0 - no compression, simply copies GUID ipgPacked = 1 - reordered hex digits only, len=32 ipgCompressed = 2 - re-encoded text, len=20 Packed is used for reg data, Compressed for descriptors. All MSI apps should be uninstalled before using this build, to avoid leaving obsolete info in registry. ShowMsi.vbs and RunScrpt.exe have been updated. 98-04-01 malcolmh Fixed bug: 4011: Msiexec /a should be remapped to mean "admin" *** CHANGE TO MSIEXEC COMMAND-LINE FLAGS *** - Admin installs (formerly /N) now use /A - Advertising (formerly /A) now uses /J 98-04-01 malcolmh Fixed bugs: (NT5 app deployment) 4906: Forced uninstall of apps fails 4894: App Publishment installs into wrong user profile 98-04-01 bench The LanguageId property has been replaced by the UserLanguageID and SystemLanguageID properties. 98-04-01 bench Replaced the VersionEngine and VersionServices properties with a single VersionMsi property. 98-04-01 mattwe bug 4701, 4897 - Internet optimization of file:// protocol. Instead of caching the database now, we use the standard practice of stripping the file:// part, and using the resultant path. WININET does this in one of its APIs. Also, we now handle the variety of forward/backslashes that you should be familiar with in the shell. 98-04-01 chetanp bug 4830 - we now support "short uninstall". We now have 2 separate flags for MsiAdvertiseScript - SCRIPTFLAGS_REGDATA_APPINFO for application registry data (OLE goop) and SCRIPTFLAGS_REGDATA_CNFGINFO for darwin cnfg. data. The SCRIPTFLAGS enums have changed. However we will be binary and source level compatible with the older values for some time. 98-04-01 chetanp bug 4473 - we now place the SYSTEM ACL on the published product key if we are called inproc (MsiAdvertiseProduct) by the LocalSystem (by a service) or if we are running as a service and we are called to advertise a product by an admin. ----------------------------- Release 0.10.00.4001 ----------------------------- 98-03-31 tracyf In response to bug 4881, the REINSTALLMODE_REPAIR bit (an argument to the MsiReinstallProduct and MsiReinstallFeature API's) is now obsolete and is ignored. The same goes for the 'r' option used on the command line, and in the REINSTALLMODE property. The reinstall options are now determined solely by the other reinstall bits. 98-03-31 mattwe Bug #4898: Fixed FormatText for embedded nulls. In a string to be formatted "foo[~]" the string length should be 4, not 3, and includes two nulls at the end. This should be the rebuild of 3931. ----------------------------- Release 0.10.00.3931 ----------------------------- 98-03-30 johndelo Updated GUIDS in TestDb, to vary the low order word. Uninstall TestDb before using this build, unless you want to test the component thrashing mechanism. 98-03-30 johndelo Support for actions run at successful execution termination (commit). Custom action flag icaCommit added to permit a custom action to execute on success, similar to rollback. 98-03-30 malcolmh Fixed bug: 4488: Nested Install in Testdb doesn't work on NT4.0. I didn't fix the original cause of this bug, but I fixed the most recent cause which was an impersonation problem. I changed our impersonation count to be per-thread instead of per-process. 98-03-30 mattwe 4245: Validation skipping sequence tables. We now validate all 6 sequencing tables, and have added two new command line flags for the second option. -seq validates only the sequence table -seqall validates only the sequence tables, but does not end after an error. The final result is not reliable. However, you get to see all the errors in one run. I've also added _InstallValidate records for several new actions added since sequencing was turned off, and slightly tweaked the _Sequence table for optional bits on RegisterMIME and RegisterExtensionInfo 98-03-30 bench Fixed bugs: 4212: No indicator Rollback is running. 4313: While resume installing is in progress,please let the user know. 4469: Second install runs in no UI mode after rolling back another product install. All bugs dealt with the UI that is used during rollback and rollback cleanup. Prior to this change, all progress for rollback or cleanup was done using the basic UI. With recent changes to our execution model (seperate UI thread, generating script on server side) this stopped working. The problem was that a UI interface was being created within the service for use by the rollback processing, but the interface must be created on the client side to operate correctly. The fix is to use whatever UI the client side is currently using. This wasn't done before because if the full UI was being used, it may have had a cancel button or may not have had a progress bar. These problems have been overcome by disabling the cancel button on the full UI (we know which control is the cancel control because the author specifies this) and we just assume that the dialog will have a progress bar on it. Thus, if you are using full UI and either need to rollback a suspended install or need to rollback the current install, the full UI will be used to display the rollback progress. This is a change from previous behaviour. 98-03-30 tracyf Added the internal-only MsiRegisterSysHandle, MsiCloseSysHandle, and MsiCloseAllSysHandles functions. These routines allow Darwin to clean up open system handles (file handles, mutex handles, etc) in case of a fatal error (out of memory, etc). Any handles that are currently closed using WIN::CloseHandle should use these routines instead. 98-03-27 malcolmh Fixed bug: 4294: LastUsedSource entries don't match spec The LastUsed* values are now combined into one value. 98-03-27 malcolmh Fixed bugs: 3799: Make sure all environment variables are expanded in the context of the user 3987: Transform: Uninstall cannot apply transform from local cache 4873: Assert in latebind.h when running on Windows 95 in CoSetProxyBlanket ----------------------------- Release 0.10.00.3927 ----------------------------- 98-03-26 chetanp bug 4826 - added the Extension.MIME_ column for the Content Type associated with the Extension. This allow us to have multiple Extensions point to the same Content Type (previously this was not possible due to the fact that we were gathering this association from the MIME table) 98-03-26 chetanp bumped up script version to 16 due to changes in the Extension registration opcodes 98-03-26 chetanp the Extension registration opcodes now take the associated ContenType 98-03-26 mattwe !! DATABASE VERSION 0.27 !! Backwards compatible with 0.26 98-03-26 chetanp bug 4847 - disable timeouts for type library registrations/ unregistrations 98-03-26 chetanp moved the SetODBCFolders action to after CostFinalize since it uses the Component.Action column (created only in CostInitialize) and the SetTargetPath function of the directory manager 98-03-26 mattwe Added Class.RemoteName column. This is used for remote DCOM servers. Validation suggestion: This is only valid for classes whose context is RemoteServer32 98-03-26 mattwe Bug 4511: Added conditionalization for components for Class, CreateFolder, Extension, PublishComponent, Typelib, Shortcut. This affects schema and testdb. t-robmen is changing Spy. 98-03-26 mattwe Changed localiztion bits to NO-LOCALIZATION for Class.Argument and Shortcut.Argument 98-03-26 davidmck Added code to services object to SetErrorMode(SEM_FAILCRITICALERROS) and debug code to check in places where we used to set it that it is correctly set. We clear it before starting Services and before starting a process to self-reg. 98-03-25 bench Fixed bugs: 3389: file properties are inconsistent and/or need to be updated properties now consistent among shipping files and include new name "Windows installer" 4384: In Basic UI window caption, Installer needs to have an uppercase first character Basic UI caption changed to just "Windows" and default text in basic UI changed to "Please wait while Windows configures [ProductName]." 98-03-25 malcolmh Fixed bugs: 4636: (NT5) Assignment not working for apps that has shortcuts in a submenu under Programs 4474: (NT5) Assert in execute.cpp uninstalling published/assigned app 4551: (NT5) Forced uninstall at winlogon when non admin fails 4436: Sourcelist - Cannot install on demand from browsed source (floppy) 4513: Feature Request: Need to implement MsiQueryFeatureStateFromDescriptor ----------------------------- Release 0.10.00.3924 ----------------------------- 98-03-23 malcolmh Added 'N' option to msizap to allow Uninstall key to be processed independent of other keys. 98-03-23 malcolmh Fixed bugs: 4832: Blank media label is allowed even when multiple media tables entries are present 4763: Assert in Coreactn.cpp file installing Testcab from floppy disks. 98-03-23 andrewh bug 4793: "Darwin 3727 does not evaluate the IE40 NT50 condition in the InstallSequence table correctly", added an internal action "ResolveSource" to ensure SOURCEDIR is set which was the real problem, not the condition evalution ----------------------------- Release 0.10.00.3920 ----------------------------- 98-03-20 chetanp bug 4690: We now do not publish a Darwin Descriptor if the corr. component is disabled (at advt time). 98-03-20 bench Bug 4789: InstMsi and CopyMsi no longer register Darwin as an OLE server on Win9X. This is accomplished by calling msiexec -d (which just registers the shell verbs) instead of msiexec -regserver on that plaform. Having Darwin act as an OLE server on Win9X is unecessary and only degrades performance. 98-03-19 chetanp fixed bug 3606. We now use short file names for all ole class server registration and always enquote our extension servers 98-03-19 johndelo In quiet UI mode, the default response for the timeout dialog ("Installer is not responding"), will be "Retry" for the first 10 timeouts, after which it will be "Cancel". Timeout has been disabled around the database copy op, which was known to occasionally timeout. 98-03-19 johndelo Custom action type 34 has been changed (CustomAc.doc). Target column for this EXE mode ONLY must contain the complete path to the EXE along with the command arguments. Properties may be embedded in the string, but it the author's responsibility to quote the EXE path if needed. Errors are not produced if the EXE cannot be created, of if it returns non-zero and the return is not disabled. 98-03-19 tracyf Fixed bug 4491. To fix this one, I needed to add a new "SpawnWaitDialog" control event. This event pops up the dialog specified in the "Argument" column of the ControlEvent table if the specified Condition is FALSE, and keeps the dialog up for as long as the condition remains FALSE. As soon as the condition evaluates to TRUE, the dialog is automatically removed. For bug 4491, this is used to pop up a "Please wait..." dialog if the user clicks the "Install Now" button (or the "Next" or "Disk Cost" buttons on the Selection dialog) before background costing is complete. Along with the new ControlEvent, a new property has also been defined: "CostingComplete". Thus, the conditional statement for the SpawnWaitDialog would be "CostingComplete = 1". The dialog specified for SpawnWaitDialog should have only one active Control on it - a "Cancel" button. You'll need to add an "ExitDialog" control event tied to this button, with an argument of "Exit". This will allow your "Wait" dialog to be cancelled without triggering any other event tied to the button that spawned your "Wait" dialog. See the Dialog, Control, and ControlEvent tables of the latest TestDB.msi for an example. 98-03-19 bench Added the UserSID property, which is the string representation of the user's security id. Only set on NT. This property is useful for custom actions that need to access registry keys under HKEY_CURRENT_USER. When a custom action is executed in the installation service, it may not access HKEY_CURRENT_USER directly. Instead, it must open a key beneath HKEY_USERS. The value of this property is the name of the key under HKEY_USERS which may be used in place of HKEY_CURRENT_USER. 98-03-19 tracyf Fixed bug 4491 - The DestName column of the MoveFile table now supports short|long filename syntax. 98-03-19 chetanp bug 4745: Registry.Value column is now L0 inplace of L255 ----------------------------- Release 0.10.00.3917 ----------------------------- 98-03-16 johndelo Fixed bugs 4169,4569, many transform-related bugs. Transforms now can be applied multiply to databases opened read-only or read-write, with tables unloaded, loaded, saved, or previous transformed. The format of transforms files HAS BEEN CHANGED in order to fix the many bugs, and now represents data in the same format as the databae files (with considerable space saving). Also the CLSID of the storage is now validated when applying transforms and the previous format is rejected. MsiTran.exe view transform mode temporarily supports both the old and the new transform file format. An extensive transform test checked in: TestTran.vbs The API automation function GenerateTransform now works in the database compare mode (no transform file), returns a boolean indicating whether differences found. 98-03-16 malcolmh Fixed bug 4039: Darwin shows an unexpected termination dialog when user error is on the screen. 1) Removed imtActionDone message. 2) Added log mode character 'f' to represent 'files in use'. Log mode 'd' is now obsolete 3) Added imtResolveSource message 4) We now put up the source resolution dialog on the client side, via the imtResolveSource message 5) We will now pass messages on to the Basic UI if the handler returns imsNone 6) Changed imtCommonData's value 98-03-16 bench Renamed Version95 property to Version9X. We will continue to set the Version95 property, but the Version9X will be the only documented property. ----------------------------- Release 0.10.00.3913 ----------------------------- 98-03-12 chetanp fixed bug 4554 - nullable shellnew value now supported 98-03-12 chetanp ffixed bugs 4597, 4662 - MsiAdvertiseScript with fRemoveItems set to true now no longer creates a separate "reverse" script. We now execute the same script with a new special "reverse advt" flag. Affects the MsiAdvertiseScript function and the advertise operations. 98-03-12 davidmck Removed the SetCDInfo action from the code since it didn't work and wasn't used. 98-03-12 tracyf Added several optimizations to costing: during reinstall, costing is no longer performed for any activity not involved in the reinstall (i.e. no file costing is done when only re-registration is being performed). We also now cost only those components actively being modified (this is especially significant when installing or reinstalling a small number of features/components) 98-03-12 mattwe Bugs 4694, 4695: We now handle bogus slashes in URLs by calling InternetCanonicalizeUrl. IE handles URLs of the form http:\\ or http://, and while backslashes are technically illegal, they handle them. For Darwin, I could reject them, but recognizing them is harder than calling an API to fix them. ----------------------------- Release 0.10.00.3910 ----------------------------- 98-03-09 chetanp bug 4113, 4390 : we now skip the source resolution in the component installed states determination and component management logic. Made changes to the GetComponentPAth fn in msinst.cpp and the class and extension processing code (which was also previously forcing source resolution during uninstall). 98-03-09 chetanp completed mreged nested installs support - we impose the following restrictions on merged nested installs - 1. a component can occur atmost once in the same install (no sharing of components between products in a single install). 2. no component in an install can be such that it requires to thrash any other component in the same install. 3. a product can occur at most once in the same install. (no P1 has P2 and P3, and P2 has P3 as well, kindof scenarios). 4. a product can install selective features of a nested product. However during uninstall it has to invoke the nested product with "REMOVE=ALL". This is needed because we do not keep the clients of a product on a per feature basis, but instead on the entire product and the product needs to go away when the last client wishes to do so (no feature of a child product can be removed if there are more than one clients of the product). 5. a child install will not appear in the add/remove control panel list of products unless it has also been installedstand-alone. 98-03-09 chetanp bumped up the script version to 15 due to addition of new opcodes (see below) and change in ixoProductRegister/ ixoProductUnregister and ixoProductPublish/ ixoProductUnpublish. 98-03-09 chetanp added ixoProductPublishClient/ ixoProductUnpublishClient opcodes to manage the clients for a product. 98-03-09 chetanp added ixoProductCPDisplayInfoRegister/ ixoProductCPDisplayInfoUnregister opcodes that control whether a product appears in the add/remove control panel. These opcodes are used only if the product is being installed w/o a parent. 98-03-09 eugend I've fixed bugs # 3262, 2925, 2190 & 2939. 98-03-09 mattwe 4546: According to Malcolm, RemoveFile.FileName really should be nullable. We changed this from nullable, to non-nullable during a recent Scopes prompted schema clean-up... 4318: Modified InstallExecute sequencing for InstallServices to be NT only. (Added Condition VersionNT) 4386: ServiceControl.Arguments validated as KeyFormatted. Already coded that way. Still open, assigned to Doc. 4326: Removed a redundant InternetGoOnline in msiutil, and changed the function to recognize URLs for cabinets in execute. 98-03-06 mattwe Bug 4470: In our rollback generation for services, we read the value of service dependencies incorrectly, and corrupted the data. On writing the rollback, the service couldn't be restarted, and rollback would abort. The value should be valuevalue (double null terminated.) ----------------------------- Release 0.10.00.3906 ----------------------------- 98-03-05 bench Fixed bug 4332, which required significant changes to our PID handling: 1) the PIDTemplate property is no longer unset after PID validation 2) the PRODUCTID property has been renamed to PIDKEY. This property is no longer set to the full PID after validation 3) a new property, ProductID, is set to the full PID after validation. If this property is not set, PID validation has not occurred. 4) PID validation is no longer performed implicitely in the CostInitialize and RegisterUser actions. Rather it is performed in a new action - ValidateProductID. This action should be sequenced both before the UI wizard in InstallUISequence and before RegisterUser in InstallExecuteSequence. 98-03-05 malcolmh Fixed bugs: 4207: Need to define which error msg's should quietly be returned to the API caller 2493: Error opening installation log file in TEMP directory, when TEMP directory is missing 4456: Handling multiple Help / Detect and Repair 98-03-05 bench Fixed bug 3379, allowing Validation to succeed even if the _Validation tables references tables that don't exist in the package. This will allow a package with only a few tables to use the _Validation table as is from schema.msi. As a result of this fix, simple.msi and minimum.msi now use the _Validation table from schema.msi. 98-03-05 eugend IMsiHandler::Terminate(bool fFatalExit) implemented - it destroys all dialogs and all bitmaps, icons, fonts and imagelists created in the handler should a fatal error occur. I've also modified the way IMsiHandler::Terminate() is called in MsiUIMessageContext::Terminate() (in ENGINE\ACTION.CPP file). 98-03-04 davidmck Moved the flags for debug memory actions from the DEBUGMEM environment variable to the _MSI_TEST environment variable. Currently implemented flags are: A - check memory on alloc F - check memory on free I - no memory preflight init K - keep memory allocations M - log memory allocations 98-03-04 malcolmh Fixed bug 4477: Msi with extended use of conditional components crashes Darwin. 98-03-04 malcolmh Added 'U' option to msizap. This allows removal of only the %USERPROFILE%\MSI folder. 98-03-04 malcolmh Fixed bug 4462: Win95 API automation functions fail if services not initialized. DEV: Changed g_fWindows, g_fWin95 to g_fWin9X 98-03-03 bench This restriction has been in place for a while (ever since script generation was performed on server side) but I don't think it has been explicitely stated. All Directory marked as "configurable" in the Feature table must have names in ALL CAPS. This is required so that if these folders are changed through the UI on the client side, the new values may be passed across to the server side as public properties. I have fixed TestDb to conform to this restriction. ----------------------------- Release 0.10.00.3903 ----------------------------- 98-03-02 mattwe Bugs: 3776 Inconsistent nullable flags was causing build failures in Office now that Scopes is checking. There was another dupe on this topic. 4339 Service being started multiple times. After a bunch o' checking, it turns out that really all that was happening is that we had the message issuing from inside a wait loop. That's cleaned up and now you'll only get one message per start. 4430 Vital Services flag. I chose 0x8000 0000 as a flag in the ServiceInstall table to mark a service as vital. This overlaps with the Bad Integer value, so that's been changed to 0x8000 instead. I've checked with the only client, and cleared it past them not to bump the DB version. 4432 Exposed automation for GetSelfRelativeSD for testing. 98-03-02 malcolmh Fixed bugs 3547 (Remove 'run script' option /~ from msiexec) and 4434 (CoInitialize before doing selfreg/unreg). ----------------------------- Release 0.10.00.3827 ----------------------------- 98-02-26 chetanp The REsource table schema has changed. The key is now made up of the File_, ResType and ResId columns 98-02-26 eugend Fixed Rich Edit related bugs # 4086 & 2854, international lang. bugs # 3892, 2945, 3447, 4400 and bug # 4303 - I've modified CONTROLS.CPP in order to fix the last 5 ones. 98-02-25 bench Added new syntax for Directory.DefaultDir column: [targetname]:[sourcename] If the value contains a ':', the string before the ':' is used during target path directory resolution and the string after the ':' is used during source path resolution (or target path resolution during admin installs). This is useful for specifying different source and target folder names. Also, in addition with the '.' syntax, this can be used to add levels to either the source or target paths for a single directory. For example: TARGETDIR [blank] SOURCEDIR MyAppDir TARGETDIR MyApp Bin MyAppDir Bin Binx86Dir BinDir .:x86 BinAlphaDir BinDir .:Alpha will give you target paths of MyAppDir: [TARGETDIR]MyApp\ Bin: [TARGETDIR]MyApp\Bin\ Binx86Dir: [TARGETDIR]MyApp\Bin\ BinAlphaDir: [TARGETDIR]MyApp\Bin\ and source paths of MyAppDir: [SOURCEDIR]MyApp\ Bin: [SOURCEDIR]MyApp\Bin\ Binx86Dir: [SOURCEDIR]MyApp\Bin\x86\ BinAlphaDir: [SOURCEDIR]MyApp\Bin\Alpha\ 98-02-25 bench The NOUI property has changed to LIMITUI, since the property just limits the UI to basic and doesn't really turn off the UI. NOUI will still be supported for some time. 98-02-25 davidmck Added src\install\darreg.txt. This contains all the data needed to register darwin files at install time without running msiexec /REGSERVER. 98-02-24 malcolmh Fixed bugs 4323, 4334. Msizap now ignores the SERVICE_DOES_NOT_EXIST error and delete folders and files regardless of their attributes. 98-02-24 malcolmh Fixed bug 4340. Added WINAPI to INSTALLUI_HANDLER prototype. 98-02-24 malcolmh Fixed Bug 4373. ERROR_INSTALL_TRANFORM FAILURE is now ERROR_INSTALL_TRANSFORM_FAILURE. ----------------------------- Release 0.10.00.3818 ----------------------------- 98-02-18 malcolmh Added the PWNOMODIFY and PWNOREMOVE properties. These properties prevent us from writing certain values under the Uninstall key, to disable ARP and ProgramsWizard functionality. See the properties spec (http://officeweb/specs/TCO/DarwinProperties.html) for full details. 98-02-17 malcolmh If you do msiexec /x without explicitly setting a UI level you'll now get a prompt to confirm that you really want to uninstall. As /x is what the context menu uses, you'll see this prompt when you right-click on a Darwin package and choose Uninstall. This does NOT affect any of the following: - Calls through any Darwin API - MSI.DLL - Msiexec /x when you specify /q, /qn, /qb, /qr, or /qf 98-02-17 chetanp The MIME.Extension_ column is now non-nullable. removed the CreateProgmanItems and RemoveProgmanItems actions from template installexecutesequence table added SelfUnregModules action to template installexecutesequence table ----------------------------- Release 0.10.00.3817 ----------------------------- 98-02-17 chetanp schema changes - 1. The ProgMan table has been removed 2. Following column sizes/ attributes are Class.Argument S255 L255 (localizable) DrLocator.Parent s32 S32 (nullable) DrLocator.Path s255 S255 (nullable) IniLocator.FileName s96 s255 (size change) RegLocator.Key s80 s255 (size change) RegLocator.Name S50 S255 (size change) RemoveIniLocator.FileName s96 l255 (localizable + size change) RemoveIniLocator.Section s96 l96 (localizable) RemoveIniLocator.Key s128 l128 (localizable) RemoveIniLocator.Value S255 L255 (localizable) Shortcut.Arguments S255 L255 (localizable) Verb.Command S255 L255 (localizable) Verb.Argument S255 L255 (localizable) 3. a @ in the DrLocator.Path column no longer evaluates to . 98-02-16 tracyf Cleaned up the basic UI: it's now got an icon, better looking font, and a simplified "Please wait..." message instead of action specific names and data (we still log all ActionData). ----------------------------- Release 0.10.00.3813 ----------------------------- 98-02-12 bench Fixed the custom action flags to work correctly with our new sequencing model. Our new flags are the following: (the bit names may change, the values will remain the same) (note: the first to flags only make sense for CAs duplicated in both sequence tables) icaFirstSequence (256) : CA run in first sequence we execute CA in UI sequence: run whenever UI sequence is run CA in Execute sequence: run only if UI sequence wasn't run (as in basic or no UI) icaOncePerProcess (512) : CA run once per engine process (there are potentially two engine processes on NT, one for the client running the UI sequence and one for the server running the Execute sequence. On 95, there is only one process running both sequences) CA in UI sequence: run whenever UI sequence is run CA in Execute sequence: run if in server, or in client if basic or no UI. icaClientOnly (768) : CA is run in client only if connected to a server. CA in UI sequence: run only when in the client or connected to the server (basically only run on NT with full/reduced UI) CA in Execute sequence: never run NOTE: I am unclear to the benefit of this type of CA, but this was supported before so it is still supported. icaInScript (1024) : same as before, only run in execution script. As such, this only makes sense for CAs in the ExecuteSequence table. icaRollback (256) : same as before, only used if icaInScript is set icaNoImpersonate (2048) : do not impersonate the user. Should work with all custom action types, not just icaInScript CAs as before 98-02-11 eugend I've replaced the CMsiMaskedEdit control with the one provided by a-jhark (this control is used only for PID number). I've fixed bug # 3679 - the cursor doesn't move on its own within edit controls now. 98-02-11 davidmck Replaced the ClearVolumeCache function in services with ClearAllCaches so the volume and record caches are cleared. 98-02-11 t-robmen Added (-x) flag to MsiDB.exe. This flag will allow you to extract a file/table out of a specfied database. ex: msidb.exe -dtestdb.msi -xBinary (extracts the Binary table from the testdb.msi into a file named Binary in you current drive) NOTE: This flag will NOT extract storages (aka: nested msi's) 98-02-11 bench Added MSPATCHC.dll to the TOOLS folder on \\united\darwin. This is required by msipat.dll. ----------------------------- Release 0.10.00.3811 ----------------------------- 98-02-11 bench Patch table: added Attributes column - a bit field for various patch attributes. Also moved the Patch.Sequence column to the set of primary keys to allow multiple patches for the same file. These schema changes are merged in with the previous changes for version 26. 98-02-11 bench MSPATCH: changed the dropped dll from mspatch.dll to mspatcha.dll. The new dll contains only the patch application apis, whereas the old dll also contained the patch creation apis. The new dll is of course smaller. The new dll replaces the old in the COMMON drop folder and in the files installed by instmsi.exe and copymsi.exe. 98-02-11 bench Added new API: MsiCreateTransformSummaryInfo, which creates and populates the summary information stream of an existing transform file. This api correctly fills in the properties with the base and reference ProductCode and ProductVersion properties, which has been broken for a while. Also, the MsiDatabaseGenerateTransform api and MsiDatabase.GenerateTransform methods no longer create the suminfo for a transform. Updated MsiTran.exe to use the new api. ----------------------------- Release 0.10.00.3810 ----------------------------- 98-02-10 malcolmh URL source lists are now implemented. 98-02-10 malcolmh The minimum and maximum database versions have been bumped. This means that your package must conform to version 26. 98-02-10 malcolmh The new dual-sequence table model is in place. We now have a UI sequence and an Execute sequence for each of the top-level actions (Install, Admin, Advertise). Changes to your package are required. See my mail for details. 98-02-09 t-robmen Added (-k) flag to MsiDB.exe. This flag will allow you to kill (remove) a file/table/storage inside a specfied database. ex: msidb.exe -dtestdb.msi -kBinary (removes the Binary table from the testdb.msi) 98-02-09 bench Implemented change to "transaction model." Transactions are defined as the changes that may be committed and not rolled back should an error occur. The new model is thus: InstallValidate - check disk space/files in use NestedInstall - outside parent transaction - failure of parent won't roll back InstallInitialize - mark start of transaction, lock server NestedInstall - merged with parent's transaction InstallFinalize - run script and unlock server NestedInstall - outside parent transaction - failure won't rollback parent install Note that InstallInitialize is a new action. ExecuteFinalize is renamed to InstallFinalize. 98-02-09 bench Fixed several problems with concurrent installs. We now detect when an in-progress install is still running and don't ask the user to rollback the install. If a running in-progress install is found and there is UI, a retry/cancel dialog is displayed. If no UI, ERROR_INSTALL_ALREADY_RUNNING is returned. 98-02-09 bench The question of whether to rollback a cancelled or failed install is now handled in an error message, whereas before it was authored into the final exit dialog. To keep this behaviour optional, the ALLOWSUSPEND property must be set for this question to be asked. If this property is not set, rollback is always performed after a cancel or failed install. 98-02-09 davidmck Improved handler speed by adding AttributeEx function which takes an enum rather than the string when we know what we want. Made the ProcessText function virtual so the rich edit control could overload it. Improves the speed of the rich edit control since we did all the work and then threw it away before. 98-02-08 johndelo Removed Localize column from _Validation table. The localizable attribute appears in the schema definitions. 98-02-08 johndelo ODBC: Removed Feature column from all table and script opcodes. Advertised via PublishComponent table. Attribute values are now nullable. 98-02-08 johndelo Updated headers to reflect change of message type imtDiagnostic to imtFilesInUse (see relnotes 1/31). Msi.h now uses INSTALLMESSAGE_FILESINUSE, and log modes supplied via MsiExec and automation use the letter 'f' for files in use messages. 98-02-08 bench Fixed the rollback of nested installs (that are merged in the parent's execution script). In the process, the ixoProductRestore operation was removed. ixoProductInfo with no arguments has taken its place. Bumped the script version to 13 as a result. 98-02-08 malcolmh Added args to msizap to make it less dangerous. 98-02-08 bench Added Upgrade table and Upgrade actions to schema.msi and template.msi. Since the Upgrade table is not populated, the actions currently do nothing. 98-02-08 bench Added MIGRATE property and MigrateFeatureSettings action. The property is a ';'-delimited list of product codes from which to migrate feature settings. This property is set in the FindRelatedProducts action and when applying a patch. The action sets the feature states for the current install to the states of the features in the existing products. It is assumed that the features of the existing products have the same names as the features of the installed product. 98-02-08 malcolmh The non-DBCS versions of MsiString.Compare and MsiString.Extract now support embedded nulls. Embedded nulls are treated like any other character. 98-02-08 malcolmh Fix for bug 3214 -- spit out ixoChangeMedia before ixoDatabaseCache. 98-02-08 malcolmh Fixed bug 3983 -- assert when disconnecting network card. 98-01-26 malcolmh Darwin now creates a mutex named "__MsiPromptForCD" when promping the user for a disk during source resolution. This is what we already do when prompting the user to change disks during an install. 98-02-08 malcolmh For single disk installs the volume label in the media table no longer has to match the actual volume label of the media. 98-02-08 malcolmh Source management for redist packs (and nested installs in general) is done. The nested install will use its parents to find an available source, and will also use its own sourcelist if it has been installed as a top-level install. Added SourceProduct arg to IxoSourceListRegisterLastUsed. Added ChildPackagePath, ChildDiskId, and Parent to IxoProductPublish & IxoProductUnpublish. Bumped script version. 98-02-08 malcolmh Consolidated exception handling. All exception handling is now done in our unhandled exception handler which is installed by the global message context object. It is at this point that we generate the exception message. In DEBUG builds we log the exception info message to the debug log and display the message. In both builds we'll write the message to the log if logging is enabled, and we'll write the message to the event log. The amount of exception information that we gather is less in the ship build than in the debug build. Also, we currently have a problem displaying the correct symbol names for exceptions that occur in the service. 98-02-08 mattwe ODBC: Added rollback for translators, drivers, driver manager and data sources. CMsiRegKey::ValueExists(), fixed a case that could result in either a memory leak or a over-released error record. 98-02-07 chetanp schema change - SelfReg table no longer has RegisterFn and UnregisterFn columns. We now only support the default (DllRegisterServer and DllUnregisterServer) 98-02-07 chetanp selfreg action is now run as a separate process. we use the capabilities of msiexec to selfreg. we call msiexec as a customaction in execute ----------------------------- Release 0.10.00.3807 ----------------------------- 98-02-07 mattwe DATABASE VERSION 0.25. Minimum unchanged. Internet download: Now does cabinets on a "as-needed" basis. Basically, if you never need a file from the cabinet, the cabinet won't get downloaded. You can now put *any* source under a URL, and install as if from any other source. (i.e. you can copy testdb into a web site.) Services: Added "vital" flag to ServiceInstall.ErrorControl. Add 0x8000 0000 to the value, and the if the service fails to install, you won't be provided with an ignore. Note that the "old" mechanism is used if the vital isn't set. (So you may not see an ignore even if vital isn't set.) The flag won't be read (even if set,) on 0.24 and older databases. We'll strip it and do the expected thing. InitRegKey: fixed memory leaks for keys that couldn't be opened due to access denied. It's now more stringent about failing the install. LockPermissions table: changed LockPermissions.Permissions from a text field to a binary. <= 0.24 database will still be read as a string. 0.25 and later are expected to be binary. TestDb: modified LockPermissions table to include full control for administrators for all settings. Devs now should have no problem doing full installs, as long as you're an administrator. (So please unghost it.) ----------------------------- Release 0.10.00.3806 ----------------------------- 98-02-06 t-robmen MsiDb.exe NEW features. You can now: o (-a) Add files (usually cabinets) directly into a darwin database o (-r) Add storages (usually nested darwin databases) directy into a darwin database o Do merges, do transforms, and the above two options simply by specifiy a target database with (-d) AND a source database with one of the following flags: (-m), (-t), (-a), (-r) NOTE: The target database MUST exist before using the last NEW feature. Use (-c) if the database does NOT exist yet. The (-?) option reflects the additions. 98-02-06 t-robmen Added FileSize and FileVersion to Installer OLE Automation. ----------------------------- Release 0.10.00.3805 ----------------------------- 98-02-05 johndelo IMsiDatabase::GetTableState has been exposed, and will soon replace FindTable, which can no longer be supported. For internal automation, there is a TableState property. FindTable will supported for this release only, to allow tests to be converted to use (Get)TableState, which allows a particular attibute of the table to be queried. See MsiAuto.hlp, or itsEnum in database.h. 98-02-05 malcolmh Created MSIZAP.EXE. This is a more robust replacement for clearreg. ** TESTING: this should be dropped instead of clearreg. Clearreg doesn't work any more. MsiZap does a more thorough job of cleaning your system. BE SURE to do a msizap /? to see what it does before you run it. Currently it's an all-or-nothing zap. If there's a need to be more granular let me know. 98-02-05 malcolmh Our policies are now located in their final resting spot, in: (HKCU/HKLM)\Software\Policies\Microsoft\Windows\Installer 98-02-05 malcolmh Implemented some new and changed policies: - We now respect the policy values AlwaysInstallElevated, DisableMsi, and DisableBrowse. For details on these see the Policies, SourceList, and Security specs. In short: - If both the user and machine AlwaysInstallElevated policies are set then, unless we're disabled, we'll install all apps elevated. - DisableMsi can be set such that we won't install unmanaged packages, or so that we'll refuse to install any package. - DisableBrowse replaces EnableBrowse, so that we default to allowing browsing from the source dialog. 98-02-05 malcolmh Implemented the Security spec: - We create a key named "Secure" under our HKLM\Sw\Ms\Win\CV\Installer key so that we won't ever think the key is empty and therefore won't ever delete it. - We now ACL (secure) our registry keys and files. For a full description see the security design doc on http://jdelo3. In short, we put an ACL on %WINDIR%\MSI, X:\config.msi, %USERPROFILE%\Msi, our "publish" reg keys, and our local machine reg keys. - We ACL OLE goop for assigned apps. - Our ACL gives SYSTEM full control and everyone else Read access. To delete our ACL'd keys & files you must be an admin and you must first take ownership of the key or file and then give yourself delete access. Or you can use MsiZap. - We now use the %WINDIR%\Msi directory as our TEMP dir for any secure temp files. - We should now be storing any temp file created while we're in the server should in a secure location. If you have an NTFS drive and are able to delete or change any of our temp files (rollback scripts, install scripts, temp patching files, custom action DLLs & EXEs, temp cached database) then something's broken. - We now support an "Impersonated" mode. In this mode we'll impersonate during the entire install, except when we need to access our keys and files. For these we temporarily revert to SYSTEM privileges. This necessitated identifying all possible locations where we were accessing secure files and adding the Elevate call. If I've missed any places you'll see errors like "could not write reg key blah" or "access denied writing file blah". We will operate in this mode unless policy directs us to do otherwise. - Here's the logic we use to determine whether we Elevate, Impersonate, or Frustrate. Elevate mode is what we always used to do when the service was registered; you pretty much have free reign on the system. Impersonate mode is described above. And if we must reject the installation then we're sure to Frustrate the user... IF DisableMsi policy == 2 THEN Frustrate ELSE IF the app is assigned THEN Elevate ELSE IF DisableMsi policy == 1 THEN Frustrate ELSE IF (user & machine elevate policies == 1) THEN Elevate ELSE Impersonate FI FI - We now determine whether an app is Assigned or not by looking at the ACL on the published product key and seeing whether SYSTEM is the owner. If so, then the app is assigned. This implies that we only ACL the published product key if the app is Assigned. - DEV: GetTempPath is now hard to call, as we really should be using a secure location for most of our temp files. If you see a !!! compiler errorthat you don't understand, it's probably this. - Our service now ACLs some keys and files when it starts: * HKLM\Software\Microsoft\Windows\CurrentVersion\Installer * HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\Secure * %WINDIR%\Msi - We only apply ACLs when we can. You won't get any ACLs on Win95 and you won't see any ACLs on files or folders on your FAT drive. - Added optional AdminAssigned arg to ixoProductInfo opcode. This arg is simply a placeholder, and can be set to any value. The ixoProductInfo operation will fill in the correct value. 98-02-04 chetanp enhanced component sharing and thrashing support to accomodate nested merged installs. added global component table to communicate the component client state transitions. we now recalculate the component installed and action states in ProcessComponents action. 98-02-04 tracyf Enhanced costing to support the removal of old files via the RemoveFile table when the same file(s) will also be installed via the File table. Without this support, the RemoveFile costing was subtracting the cost of removing the file, while the InstallFile costing was also subtracting the cost of the existing file (not knowing it was going to be removed by another action). Now, InstallFiles costing knows if another action is removing a file it is going to install, and if so, reacts as if the existing file is not there (i.e. no version checking, and it ignores the size of the existing file). 98-02-03 bench Upgrades/Patching: Fixed several problems, mostly to allow patches or upgrades that change the product code. Also added the ability for an upgrade to remove any obsolete patches. 98-02-02 davidmck Enhanched MSIEXEC /REGSERVER to see if msi.dll was registered to handle the proxy code and if not, call DllRegisterServer() in msi.dll. 98-02-02 t-robmen When an open database handle is passed to the OpenPackage, Dawin now correctly sets the running path. Also, UIPreview of a database is now internally specified by iuiNextEnum in engine.cpp and msiquery.cpp 98-02-02 t-robmen Added FileSize and FileVersion info to runscrpt.cpp 98-02-02 eugend Fixed bugs # 1525, 2736 - CMsiText control formats strings that contain a path or a registry key before displaying them. Fixed bug # 3244 - If there are no items in CSelectionTree control, it empties text in other controls and disables buttons. I've added SelectionNoItems control event and three new events into EventMapping.idt table. 98-02-02 mattwe Note: I am NOT adding this to TestDB until it has passed a round or two of testing. It mucks with system settings which can pretty well hose you. New optional table: Environment Documentation forthcoming. Basically, you describe names and values for environment variables. New optional actions: RemoveEnvironmentStrings, WriteEnvironmentStrings. Basically just the uninstall and install placeholders. New opcode: ixoUpdateEnvironmentStrings Same opcode for 95 and NT. The AutoExecPath is only used on 95, however. It should point at the location where the AutoExec lives. The WIN95_ENVIRONMENT_TEST property can be set to override this value to protect your system. On NT, this opcode modifies the registry directly. On 95, it rewrites the autoexec.bat file. 98-02-02 mattwe DB Version 0.24. Backwardly compatible with 0.23. See services below for schema change. Services: Added ServiceInstall.Arguments column. It's completely optional until such time as we move the mininum database version to 24. This column allows you to provide startup arguments to a service. They're passed in to the WinMain at every start, as opposed to per-start arguments in the ServiceControl table. (Per-start means each requestor can pass different arguments.) Bug/feature request #3919 98-01-31 tracyf When InstallValidate detects an out-of-disk-space condition, it now sends a message of the imtOutOfDiskSpace type to the Message facility (instead of a generic imtError message). The record accompanying the message contains a string holding the path to the out-of-space disk in field [2], the required space in field [3], and the available space on that volume in field [4]. This allows an external Handler to intercept and process the message as it sees fit. 98-01-31 tracyf Added the imtFilesInUse message type (the unused imtDiagnostic type has been replaced). Now, instead of calling DoAction("FilesInUse") from InstallValidate, the imtFilesInUse message is sent through the MsiEngine::Message facility instead. The record sent with the Message(imtFilesInUse, riRec) call describes all modules currently in use whose associated file needs to be replaced. The record contains two strings for each module - the first containing the module name, and the second containing the title of the module's main window. The MsiHandler has been modified to accept this message and display the same "FilesInUse" dialog it did before. Any external Handler can process the message as it sees fit. This change was necessary because the previous mechanism of adding rows to the Listbox table from within InstallValidate breaks when running nested installs, since the current engine and the Handler may be reading/writing separate databases. 98-01-31 tracyf NT Event logging has been improved. On either successful completion of an install, or termination due to a fatal error, a single event is now written to the Event log. The event text consists of the name of the product, and either an "install operation successful" message, or the full text of the error message resulting from the fatal error. Note: for the Event Log text to be formatted properly, msi.dll must be registered in the Registry as a source of Event Log messages, under the System\\CurrentControlSet\\Services\\EventLog\\Application\\MsiInstaller" key. This registration is performed automatically when DllRegisterServer is called on msi.dll. ----------------------------- Release 0.10.00.3730 ----------------------------- 98-01-30 johndelo MsiEnableLog now interprets a NULL log file path as disable logging, in which case the logmode is ignored. If a path is supplied, then the logmode must not be zero. There were 5 nearly duplicate bugs related to this. 98-01-30 johndelo To enable registraton of internal COM interfaces for automation, the environment variable _MSI_TEST must be set to a string containing the letter 'R'. By default only the public API automation interface and the custom marshalling code is registered. Temporarily regmsi.exe sets this environment variable until tests are fixed up. Using regsvr32 or direct call to DLL will required the environment variable to be set for internal automation registration. Other test options are forthcoming. 98-01-28 mattwe Services: added disable/enable timeout wrappers. For the most part, the service control manager (SCM) has its own timeouts that will kick back to us. 98-01-28 mattwe Services: Fixed dependent services bugs. Two things were hoked, one due to the complexity of the test case, and another from misread documentation. Reminder: The ServiceInstall.Dependencies column is a list of service *names*, like the ones in ServiceInstall.Name or ServiceControl.Name. Each name should be separated by [~] (null), and the list should end with [~][~] double null. 98-01-28 davidmck Changed the interface between client and server from using IDispatch to using IDL files and doing the RPC calls directly. This is a performance improvement. 98-01-28 mattwe Script: new opcode ixoStreamAdd. Bumped script version to 11. This allows a stream to be added to a file. The last parameter is an IMsiStream object, with the data. This does not rollback, similarly to ixoStreamsRemove, as it is only used by the admin database copy. Property: Added AdminProperties (IPROPNAME_ADMIN_PROPERTIES) This contains a ';' delimited list of properties that should be saved for post-admin installs. This can include lower or upper case (external) properties. Network installs: during a network install, the properties listed in AdminProperties are saved to a separate UNICODE stream called AdminProperties in the destination storage. Post admin install: property resolution now has an intermediate step where properties from the admin install override values in the database. These values, in turn, are still overriden by the command line. ----------------------------- Release 0.10.00.3727 ----------------------------- 98-01-26 johndelo Timeout logic in the UI thread changed to provide frequent (currently 50 msec) ticks which are sent to the UI handlers to pump their messages, eliminating some lockups and display failures. After a given number of ticks (currently 20 seconds) the timeout error is displayed allowing the user to retry or cancel (except if in the debugger). This timeout is disabled when running customs actions, as they can't be assured of sending progress messages. 98-01-26 johndelo MsiCloseAllHandles is fixed to close only handles allocated by the calling thread (not those used by the engine, automation, or other custom actions). MsiCloseHandle must be called in the thread where the handle was obtained. An assert is now given where this fails, but will be changed to an error. 98-01-26 bench We no longer register package codes under a "Packages" key. Package codes are now only stored under the appropriate product key. This change was made to avoid the complications of merging the Packages key on NT5. 98-01-26 bench Added new reinstallmode: REINSTALLMODE_PACKAGE, or 'v'. This mode ensures the source package is used and cached, even if a cached package exists. This will be used to reinstall from network images that have been updated with patches that don't change the product code. 98-01-26 t-robmen Modified MsiSpy to use MsiGetComponentPath instead of MsiGetComponentLocation. Removed references to INSTALLSTATE_DEFAULT as a returned value. OLE Automation: o Added productCode to GetFileInfo and Query Component State o Use GetComponentPath instead of GetComponentLocation (in the near future GetComponentLocation will be removed) 98-01-26 mattwe TestDb: modified the TestDB service to uninstall as expected, as well as not to be deleted during an install if it already exists. (It used to delete it, and then install it fresh. Now it just re-configures what is already there.) 98-01-26 mattwe Rollback: Registry keys and files/folders will now preserve security settings during a remove/rollback. 98-01-26 mattwe Services: you can now "re-configure" pre-existing services on a machine, which includes re-installation. Additional: Bug #4016, #3645 98-01-26 tracyf Darwin now creates a mutex named "__MsiPromptForCD" when promping the user to change disks (the mutex is closed after the user inserts a new disk, clicks OK and Darwin has verified the disk label of the new disk, or the user cancels). This allows CD autorun applications to determine whether or not to run (or disable UI). 98-01-26 tracyf New SelectionManager change/feature: If the user applies a patch to an install, such that any feature currently installed RunFromSource now references one or more files that need to be patched, that feature will be forced out of the RunFromSource state. This is done by defaulting the action state of the feature to Advertised, and disallowing RunFromSource as a possible install state. 98-01-26 tracyf The DiskPrompt message displayed when Darwin needs the user to insert a new disk has changed. It is now built by treating the imsgPromptForDisk error string, combined with the DiskPrompt property, as a template, and using the DiskPrompt column of the Media table as an argument for the template. A topic is being added to the documentation to explain how this works (see bug 4031). 98-01-26 johndelo Custom actions will now handle the various execution models. Actions before InstallValidate will be sequenced twice if full UI is used and the service is registered. Mode bits have been defined to determine whether the action runs on the client or server or both. This required changing the bit values for deferred exection and rollback (need to add 768 if the type value was > 256). CustomAc.doc has been updated (on \\JDELO3\MsiDoc and \\XLWEB2\DarwinDoc). TestDB updated. 98-01-26 johndelo Release notes for 1997 have been archived in RELNOT97.txt ----------------------------- Release 0.10.00.3722 ----------------------------- 98-01-21 johndelo INSTALLMESSAGE_OUTOFMEMORY replaced by INSTALLMESSAGE_FATALEXIT encompassing out of memory, not responding, and premature termination. New messages are defined in the Error table for each of these: imsgTimeRemaining 16 "Time remaining: {[1] min }[2] sec" imsgOutOfMemory 17 "Out of memory. Shutdown other applications before retrying" imsgTimedOut 18 "Installer is no longer responding" imsgException 19 "Installer terminated prematurely" These messages are cached by the UI handler in case fatal exit 98-01-21 johndelo New message types may be requested by the external message handler: INSTALLMESSAGE_INITIALIZE = 0x0C000000L, // sent prior to UI initialization, no string data INSTALLMESSAGE_TERMINATE = 0x0D000000L, // sent after UI termination, no string data INSTALLMESSAGE_SHOWDIALOG = 0x0E000000L, // sent prior to display of authored dialog or wizard The SHOWDIALOG message passes the name of the action. If this message is handled (i.e. doesn't return 0) then the UI dialog or wizard will not be called. 98-01-21 johndelo The UI handling of all types and logging is now handled outside the engine in its own thread, which is the caller's thread when using the install APIs, but which is a child thread when using MsiOpenProduct and MsiOpenPackage and the session API functions. The UI thread is shared by all engines/installs for the session. The UI will time out if the engine thread fails to respond, in which case a dialog will be displayed (if not debugging). Out of memory will result in a dialog which allows a retry as well. Premature termination (i.e. crash) is not handled silently in this build. All three failures will result in an error return to the caller, but the resource cleanup is not implemented in this build. 98-01-21 malcolmh DEV: g_fIsService has been changed to g_scServerContext. This will be set to scService if we're running as a OLE service, scServer if we're running as an OLE server, and scClient in other cases. 98-01-21 bench Moved the location of the UpgradeCode information in the registry. We no longer register the UpgradeCode under the advertised product key. I have added an UpgradeCodes key under the Installer key in HKLM. Each upgrade code has a key under that, and has a value for each product with that upgrade code. Removed the UpgradeCode arg from ixoProductPublish/Unpublish and added it to ixoProductRegister/Unregister. Bumped script version to 10 as a result. 98-01-20 t-robmen Modified msispy.cpp and msispyu.cpp to clean up major MSIHANDLE leaks (now use PMSIHANDLEs and no longer use static MSIHANDLEs in Enum functions) Also removed MsiCloseAllHandles() from ~CMsispy which was crashing any OLE Automation attempted. MsiSpy OLE Automation should work without crashing now. 98-01-20 mattwe CMsiRegKey: Removed the security descriptors from CMsiRegKey.Create() Now, place the security descriptor in the CreateChild() call. This allows the registry key to get set either from the explicit Create, or the implicit AddValue. If specified, this will allow overwriting the security of an existing key. Note: The CreateChild() without a security descriptor will *not* inherit the parent's descriptor. ----------------------------- Release 0.10.00.3720 ----------------------------- 98-01-18 bench Added 3 new properties which can be queried with MsiGetProductInfo: INSTALLPROPERTY_PACKAGECODE, INSTALLPROPERTY_UPGRADECODE and INSTALLPROPERTY_VERSION. All are advertised properties. 98-01-18 malcolmh We now display progress when copying our database to the TEMP directory during first-run. We show progress both when copying from a floppy and when doing an internet download. 98-01-18 malcolmh If you send a "Master Reset" event to the basic UI's progress bar, we reset the progress bar UI. Previously the UI was reset only upon receipt of a subsequent progress report. 98-01-17 malcolmh Moved appending of ".msi" or ".msp" from the API to msiexec.exe. You have to pass the real file name to the API now, but you can leave off the ".msi" or ".msp" when using msiexec. 98-01-17 malcolmh Changed our DebugString function to prepend "MSI: " to debug messages if we're running on the client side, and "MSI (s): " if we're running in the server. 98-01-17 malcolmh We now generate install scripts in the server. Our new model allows for three possible configurations: 1) The entire install is run in the client space; we never connect to the server. We do this when the server is not registered. We'll probably eventually always do this on Win95. 2) The entire intall is run on the server. We do this when the UI level is Basic or None. In this case the only thing running on the client side is the Basic UI. 3) We run part of the install on the client and part on the server. We do this when we can connect to the server and the UI level is reduced or full. In this case when a sequence is run we process all actions through InstallValidate on the client side. We then shift to the server and run all actions from the beginning of the sequence through ExecuteFinalize. We then shift back to the client and run all actions after ExecuteFinalize. When we're running in this configuration certain actions behave differently, and we skip all UI actions. What we do differently when we're on the server side: - We don't cost. - We don't do appsearch (NYI) - We do a quicker CCP check (NYI) - We don't reboot; the reboot status is propagated back to the client side, which will trigger the reboot. As usual, I print out debug strings indicating when we switch to the server and when we switch back in case you're curious. 98-01-17 malcolmh Added reboot handling for child installs. The child propagates its reboot status to the parent. The parent will treat a child's reboot status just as it does it's own. If a child returns saying it wants to reboot now then the parent will reboot now, otherwise the parent will wait until it's done and then reboot. TESTING: I mucked with the code for reboot handling and suspended installs. Regressions is advised. 98-01-17 malcolmh Automation changes: Added MsiConman.DoInstall. Changed return value for MsiEngine.Terminate to an iesEnum. See help file for details. 98-01-16 bench Added support for the UpgradeCode property. The UpgradeCode is a guid that represents a set of products. This property isn't used anywhere yet but if it is defined in the Property table it is registered in the product's advertised information. Added the UpgradeCode to ixoProductPublish and ixoProductUnpublish and bumped the script version to 9 as a result. 98-01-16 tracyf To prevent bug 3885 from locking up the install process, the palette switching code in the Handler has been temporarily disabled. As soon as the palette bug is resolved, this code will be turned back on. Until the true bug is fixed, the side effect will be that bitmaps rendered in Darwin dialogs may be drawn with improper colors, if any other application changes the standard system palette. 98-01-16 tracyf Implemented detection of components containing files that are either patchable or compressed in the source image. Any component containing files fitting these categories are now prevented from being installed RunFromSource (i.e. the SelectionManager's GetFeatureValidStates routine will never return icaBitSource for these components). 98-01-16 mattwe Fixed admin installs to NOT install services or place security descriptors. 98-01-16 mattwe Updated ServiceControl.Events to support Uninstall only actions. Now, to install/uninstall a service, you use the ServiceInstall table, and add an entry to the ServiceControl table to delete it during uninstall. This gives you full control over services outside your install as well. 98-01-16 tracyf In an effort to give *Sequence table merging a fighting chance, all built-in Darwin actions have been given "recommended" sequence values, as demonstrated in the new versions of template.msi and testdb.msi (see the InstallSequence, AdvtSequence, and AdminSequence tables). The convention to be documented for authors is that Darwin reserves all numbers that are multiples of 10 for built-in actions (the standard actions have been renumbered using increments of 100, and any new build-in actions in the future will be inserted in the appropriate place using values such as 140, 850, etc). Authors should use these values for all standard actions, and numbers ending in non-zero digits for custom actions (again, see testdb.msi for examples of custom action sequencing). If these conventions are followed for all products intending to merge databases, all sequence tables should merge together without problems. ----------------------------- Release 0.10.00.3716 ----------------------------- 98-01-15 bench Added the ixoDatabasePatch script operation for use in admin install patching. The script version was bumped to 8 to accomodate this addition. 98-01-15 bench Added support for patching admin installs. To patch an admin install you may either 1) call msiexec.exe /p [patch package path] /n [admin database path] 2) call MsiApplyPatch(szPatch,szAdminDb,eNetworkImage,szCmdLine) 98-01-15 bench Added two arguments to MsiApplyPatch: szProduct and eInstallType. These two arguments describe the product to be patched. eInstallType defines the type of install (network, local, advertised) and szProduct defines the product code/descriptor/package path for the product. Currently only the patching of network installs is supported. 98-01-15 bench Changed the package code (was product code) summary information values for each released database (testdb, schema, simple, msispy, etc..) to remove the product version. This data is curently ignored by Darwin. 98-01-14 chetanp In order to allow the author to make permanent components that do not have a file as their key path, the "permanent" bit has been shifted to the Component.Attributes column (the icaPermanent bit). We no longer honour the iffPermanent bit from the File.Attributes column for component permanency from the database versions 23 onwards (we still honour the bit if you are running an older database with the latest darwin). 98-01-14 chetanp The RunFromSource columns in Feature and Component tables are now renamed to Attributes. This required the database version to be bumped to 23. However we still run with the old databases. 98-01-14 chetanp Changed SharedDll refcounting scheme for locally installed component with key files. Previously we used to refcount the key file of every locally installed component (which has a file as the key path) with the Shared Dll registry to ensure sharing with non-darwin installations. This leads to bloating of the registry since most of the components are actually private to the product. Now - 1. Whenever darwin installs a component locally, we check to see if the key file of the component is refcounted in the Shared Dll registry. If, yes we increment the refcount to include ourselves (, otherwise we do not refcount the component). We also make note of whether we have refcounted the component (using a special token within the key path registered in the Darwin configuration information). 2. Whenever the product wishes to uninstall a local component, we check if we have registered the component in the Shared Dll registry. If yes, we decrement the Shared Dll registry refcount for the key file. If the refcount for the key file is greater then zero, then we do not uninstall the component. 3. The above strategy breaks in the scenario where a component is installed by Darwin, then by a non-darwin installation and then the non-darwin installation uninstalls. This will uninstall the component, since there is no refcount for the Darwin install. This will break the Darwin installed product (unless it is using JIT and Darwin where we would simply reinstall the component). To overcome this problem Darwin provides the author with the "icaSharedDllRefCount" bit in the Component.Attributes (RunFromSource) column. If the author sets this bit for a component Darwin will always refcount the component with the Shared Dll registry irrespective of any existing recount. 98-01-14 malcolmh The FileName column of the RemoveFile table is now nullable. 98-01-14 malcolmh Changed args to Conman.Registerfolder and conman.IsFolderRemovable. See help/typelib for details. 98-01-14 malcolmh IxoFolderCreate and IxoFolderRemove no longer take a component code. Instead they take a bool indicating whether the folder is foreign (i.e. explicitly authored to be created/removed). Bumped the script version. 98-01-14 t-robmen Created different _Summary.idt files for each type of msispy.mis build possible [ship,debug,alpha] that correctly reflect build type ----------------------------- Release 0.10.00.3714 ----------------------------- 98-01-14 t-robmen Discovered that some files were named incorrectly or missing from %DARWIN%\src\tools\spy\idt Removed: ActionText.idt, Directoy.idt, Extension.idt, TestStyle.idt, Error.idt Added: _Summary.idt, ActionTe.idt, AdvtSequ.idt, ControlC.idt, ControlE.idt, Director.idt, EventMap.idt, Extensio.idt, InstallS.idt, PublishC.idt, RadioBut.idt, TextStyl.idt 98-01-13 malcolmh Fixed view object to support IS NULL and IS NOT NULL on object fields. 98-01-13 malcolmh The RemoveFiles action now support removing author-specific folders. These folders are specified in the RemoveFiles table, just like files are, but with a NULL FileName. The author-specific folders are removed after the removal of author-specific files, and after removal of the files installed by InstallFiles. A folder is only removed if it is empty. The RemoveFiles actions triggers the folder removal by generating an ixoFolderRemove opcode. 98-01-13 malcolmh I think the full UI should work now. I've removed GetComponentPath from the IMsiServer interface. It's now a global function. I've re-enabled running the UI in a separate thread. TESTING: GetComponentPath is no longer a method of MsiServer or MsiConfigurationManager. ----------------------------- Release 0.10.00.3713 ----------------------------- 98-01-13 johndelo Separate UI thread logic is disabled in this build only, to allow fullUI with the service. However, problems will exist with nested installs and custom actions. This has been fixed and all will be operational in the next build. 98-01-12 johndelo Full UI does not work with the service registered for this build, due to RPC problems. The UI runs in a single thread which allows UI from nested installs and custom actions but currently gives problems when the handler calls to the engine which then does RPC to the service. 98-01-12 mattwe Internet download: Modified volume and path objects with minimal URL support. These are meant to be sources, not destinations, so most APIs will return errors with a URL volume. Automation forthcoming for new methods. Modem support and progress/cancel coming. You can now specify a URL on the command line for a package to install. Example: msiexec /i http://phoenix.csc.calpoly.edu/~mwetmore/testdb/testdb.msi (Try it, it works! Currently only the "typical" install source is actually up on that server.) Should see no net change to functionality to non URL paths. TESTING: watch those path/volume tests/benchmarks, please. 98-01-12 malcolmh Fixed bug 3814. Transforms are again being cached in the user profile. 98-01-12 malcolmh Fixed bugs 3847, 3861, 3863, 3864, 3865. These were all regressions caused by recent code changes, mostly related to SQUIDs. 98-01-12 malcolmh Fixed bug 3829. The Engine.Initialize automation function now defaults to iuiBasic if you don't specify a UI level 98-01-12 t-robmen Modified %DARWIN%\src\makefile to build %DARWIN\data\msispy.msi - x86 ship %DARWIN\data\msispyd.msi - x86 debug %DARWIN\data\msispya.msi - alpha ship 98-01-12 tracyf Changed the name of the Directory_Configurable column in the Feature table to "Directory_" (the old name will still work for a while). 98-01-12 bench Updated MsiTran.Exe to accept validation bits used to validate transforms before applying them. See command line help for more info. 98-01-12 t-robmen Added %DARWIN%\src\tools\spy\idt directory and subdirectories. The included files are used to create the installation database for MsiSpy (msispy.msi) during the build process 98-01-12 bench Added support for a "package code" or rather allowing a different guid in the summary info of a package than the product code. The guid in the package is now the "package code" and may not necessarily equal the product code. Also, the product version is no longer appended to the guid in the summary info. We now register the "package code" under HKCR\Installer\Packages and for each product register the code of the package the product was installed from. 98-01-12 bench fixed bugs 3850-3852. We now properly handle validating transforms that change the product code and product version. ----------------------------- Release 0.10.00.3709 ----------------------------- 98-01-08 johndelo Logging can be specified only via MsiEnableLog. (MsiExec /L simply uses this API). The properties LOGFILE and LOGMODE are no longer supported. Logging is per-process, independent of the particular package or engine instance. Provided logging is enabled, the property LOGACTION allows a particular set of actions to be logged for a product. 98-01-08 chetanp fixed Darwin bug (3803) that registers run-from source file in the Shared Dll registry. 98-01-08 chetanp changed ixfFeaturePublish/ ixfFeatureUnpublish opcode to have a separate Absent flag. 98-01-08 chetanp implemented GUID squishing. We now store all (internal) Darwin GUIDs - Product Ids, Component Id, Patch Id, Qualified Component Ids, and the GUIDs in Darwin Descriptors as SQUIDs (GUIDs squished to 20 characters) in the registry. Though this should not affect any of the API tests, this would mean that test/tool that itself looks around for Darwin GUIDs in the registry would fail. Use the RunScrpt.exe tool to Pack and Unpack GUIDs via script, using the PackGuid and UnpackGuid functions. 98-01-08 malcolmh Implemented TransformsAtSource. Transforms are not cached, but assumed to be at the source, if any of the following conditions are true: 1) you set the TRANSFORMSATSOURCE property, 2) you specify an '@' at the beginning of your list of transforms, or 3) when executing the script we see that you have a TransformsAtSource policy value set to 1. 98-01-08 malcolmh msiexec /P is now used to invoke a patch. msiexec /I is now used to install. /X and /I will now accept product codes, making the previous /T and /C obsolete. /T is now used for transforms and /C has been removed. 98-01-08 malcolmh The /A (Advertise) parameter to msiexec now takes a Transforms list and a lanGuage, specified with the /T and /G switches, respectively. 98-01-07 bench Renamed the AdminInstallFinalize action to InstallAdminPackage. This is because the action should come before InstallFiles, so we didn't want to give the notion that the action should "finalize" anything. The AdminInstallFinalize action will stay around for 30 days and currently just calls the InstallAdminPackage action. Also updated testdb.msi, template.msi, etc... 98-01-06 malcolmh Added /L as a switch to msiexec. This sets the log mode by calling MsiEnableLog. Syntax: /L[] 98-01-06 malcolmh Added INSTALLPROPERTY_VOLUMEPREFERENCE to the list of properties exposed by MsiGetProductInfo. 98-01-06 malcolmh The product code in the summary info stream *must* match the one in the property table or you won't be able to run maintenance mode. This will remain true until we introduce the notion of a "package code". 98-01-06 malcolmh The script version has been bumped to 6 as a result of source management opcodes changes. 98-01-06 malcolmh We now cache an MSI to the temp dir whenever we realize that the database we're running from isn't the cached db for the product. 98-01-06 malcolmh (dev concern only) IPROPNAME_ORIGINALDATABASE now contains the launched-from database in maintenance-mode if there is one (previously it contained the cached db). 98-01-06 malcolmh MsiGetComponentPath now returns the actual installstate for installed components (INSTALLSTATE_LOCAL/SOURCE) instead of INSTALLSTATE_DEFAULT. 98-01-06 malcolmh Removed 'advertise' section from validation and changed msival accordingly. The schema's _InstallSequence table has been changed to reflect this. 98-01-06 malcolmh The minimum disk ID in the media table has been changed from 0 to 1. Validation has been updated to reflect this. 98-01-06 malcolmh Moved PublishProduct, PublishComponents, PublishFeatures, RegisterProduct to just before ExecuteFinalize. 98-01-06 malcolmh The DiskPrompt property is now used as a template. For each disk the prompt from the media table is inserted into the DiskPrompt property's [1] parameter. The result is used in the "Please insert..." string that's in the error table. 98-01-06 malcolmh Source management: - The UI's RFS icons now represent the actual source type during first-run and the type of the LastUsedSource in maintenance-mode. - We now publish the source list only when we publish the product (i.e. at advertise time or first-run if no advertisement has taken place) - When we publish the source list we also now attempt to divine the media package path for the MSI at this time if we're running from media and the MediaPackagePath property is not set. - When we publish the source list we implictly add the source you're running from as a source for the product. - If we're not advertising then we if we've resolved the source (i.e. SOURCEDIR is set) then we set the resolved source as the Last Used source for the product. - We bypass source resolution if we're not running from the cached database. This is because the source we've been launched from has be a valid source, so we use it. - Run-from-source components are now source resilient. We'll find a valid source for them whenever their path is need. We cache the most recent source in-memory, and we try this source first, followed by the raw LastUsedSource, before we fall back to our standard source resolution mechanism. - The ixfSourceListMediaPublish opcode has been removed. Its functionality is now in ixfSourceListPublish. - The ixfSourceListRegisterLastUsed opcode has been added. See msiauto.hlp. - The ixfSourceListPublish opcode's arguments have changed to accommodate media sources. See msiauto.hlp. 98-01-06 malcolmh ixfDatabaseCache now first removes any existing cached package for the product before it caching the one given to it. 98-01-06 malcolmh Component registration changes: - We no longer have an explicit state key for the component state. We now derive this from the key file format. - Run-from-source component format for key files and folders has changed. We now store two digits followed by the relative path of the component from the root of the source. The two digits indicate the disk ID of the disk containing files for this component. - The component format for registry keys has changed. We now store two digits followed by a colon followed by the subkey. The two digits indicate the hive. For run-from-source components we offset the hive by 50. For example, CLASSES_ROOT, which is 0, would be stored as "00" for a local component and "50" for a run-from-source component. We remove the offset when returning the regkey. - conman.RegisterComponent now takes a disk ID - ixfComponentRegister now takes a disk ID 98-01-06 malcolmh Source management: changes were made in the way we register sources: - Under the SourceList key: - the LastUsedSource value now has a trailing backslash - we now have a LastUsedIndex and LastUsedType - Under the Net key - we now use numbers instead of letters for the indexes - we now store a single form of net paths (no more drive letter & UNC form) - Under the Media key - we now have a DiskPrompt value ----------------------------- Release 0.10.00.3706 ----------------------------- 98-01-05 bench Added UNICODE Darwin to \\united\darwin drops. The following folders were added which contain the same files as their ANSI counterparts: DEBUGW SHIPW SHIPSYMW LEGOW 98-01-02 chetanp Added support for registering and managing disabled components in Darwin. Following is the description of Darwin's behaviour in handling disabled components. 1. A Darwin component gets disabled when the corresponding Component.Condition column evaluates to FALSE. 2. A disabled component is registered with the configuration manager with an empty path and a state of INSTALLSTATE_NOTUSED (which is defined as a negative value in the INSTALLSTATE enum) when a feature that contains that component is selected for install. 3. A feature is published with all the components it comprises of, irrespective of whether the individual components are enabled or not. This allows a feature list to be independant of the machine, since the result of evaluating the Component.Condition column may vary from machine to machine. 4. The MsiQueryFeatureState API treats any constituent disabled components (in state INSTALLSTATE_NOTUSED) the same as INSTALLSTATE_LOCAL. This allows the feature state to be determined by the install states of enabled components. 5. The MsiGetComponentPath API returns the true install state (INSTALLSTATE_NOTUSED) for a disabled component. 6. The MsiProvideComponent, effectively ignores all disabled components (of that or the parent features) unless it is requesting a disabled component itself, in which case the return is an error - ERROR_INSTALL_NOTUSED.