Darwin Setup Development Notes through 12/31/96 ----------------------------- Release 0.10.00.2431 ----------------------------- 96-12-30 bench ExecuteFinalize now commits (or rolls back or deletes) the database, rather than Engine.Terminate doing so. By commiting the database in this action, we can ensure that if any actions after ExecuteFinalize (starting the app, starting help, etc.) fail for whatever reason, the database will still be commited (and remain in sync with the config database). This would not occur if Terminate did the database commitment. As such, Engine.Terminate no longer takes the boolean indicating whether to commit the database or not. Any clients that relied on Terminate to commit the database should now commit the database before calling Terminate. Note, Engine.Sequence properly handles the commitment of the database during an install, so any clients using the engine to do an install (by calling DoAction("Install") for instance) do not need to explicetely commit the database. 96-12-27 davidmck Checked in code to allow us to track reference counting bugs down a bit more easily. This code is in the debug version, but only is turned on for those objects that are explicitly turned on. Turn on reference tracking for an object by setting the TRACK_OBJECTS environment variable to a list of comma separated iids you want to keep information on. This code is currently only in the services DLL. ----------------------------- Release 0.10.00.2415 ----------------------------- 96-12-14 malcolmh Security for our server when running as a service is now set automatically by the service. There is no need to use dcomcnfg anymore. ----------------------------- Release 0.10.00.2414 ----------------------------- 96-12-14 mattwe MsiUtil: Turned off building debug launchers by default. From VB, call util.LinkerDebugOn to set them on. ----------------------------- Release 0.10.00.2413 ----------------------------- 96-12-12 bench The ixoReg* operations have been updated to allow modification of the HKEY_CURRENT_USER hive when running as a service. Entries have been added to the Registry and RemoveRegistry tables in the testdb to modify this hive. Note: this does not yet work on Win95. 96-12-12 alanr MSIGEN: MakeTables SourceDirectory and SourceFile table generation now use true Sysdiff directory names instead of Darwin property names. Short filenames have also been added for Default names of directories specified by predefined properties. ----------------------------- Release 0.10.00.2412 ----------------------------- 96-12-11 malcolmh The server can now be run as an local server or a Win32 Service. Use /regserver to register as a local server Use /regservice to register as a service if possible. Currently this registers as a service on NT and local server on Win95. Use /unregister to unregister the server (local server and service) When the service is registered and unregistered it is installed and uninstalled from the system. The server can only be registered either as a local server or as a service. All previous registration is removed each time the server is registered. You can use the Services Control Panel to view the status of the service, or to stop it. 96-12-11 bench MsiPatch: BuildAcmePatch populates a Component table rather than a Selection table. The Selection table in patship.msi has been replaced with a Component table. Note: patch application will not work correctly until that is updated also. Stay tuned. 96-12-11 johndelo Added new SummaryInformation property: PID_MSISOURCE, Source Type, which specifies the source file image type, short or long filenames, and tree(Directory table) or cabinet&file(Media table). See SummaryInfo help topic. Engine mode flags iefNoSourceLFN and iefCabinet are set from this summary property. SumInfo.Exe has been updated as well (testdb is currently set to 1, short names in tree). File copy will need to be updated to use these flags. 96-12-11 bench MsiPatch: input to BuildAcmePatch changed to include unique product keys for each app. See help for more info. 96-12-11 mattwe MSIGEN: Update sysdiff INF parsing to use feature/components Known Issues: Registry table gets the Uninstall keys points at Acme. Will replace this with a call to msiexec /m 96-12-11 alanr MSIGEN: MakeTables updated to handle ityDif, NT Sysdiff ($OEM$), directory, generating the following tables: File, Directory, Component, Feature, FeatureComponents, SelfReg, SourceFile, and SourceDirectory. ----------------------------- Release 0.10.00.2411 ----------------------------- 96-12-10 bench Moved script opening out of Engine::Initialize. Scripts should only be created if an operation other than ixoActionStart, ixoHeader or ixoEnd is executed when running as a client or when running stand-alone and the SCRIPTFILE property is set. Help is on the way. ----------------------------- Release 0.10.00.2410 ----------------------------- 96-12-09 bench Fixed some errors in the database from the Selection->Component/Feature changeover, added an ActionData message to ixoShortcutCreate, and changed the InstallFiles and RemoveFiles actions to only do ixoProgressTotal if the progress total is > 0, all in hopes of fixing the progess and logging of the various actions. If any actions don't dispatch progress or log entries that should, write strange log entries, etc., bugs should be posted. Note: an Action shouldn't be logged or be in the script if it doesn't do anything (i.e. doesn't use operations or dispatch progress). 96-12-09 thussey The launcher now copies over the server along with the darwin dlls, but does not register it. 96-12-09 tracyf Updated the helpfile to match the new Feature/Component table architecture. ----------------------------- Release 0.10.00.2409 ----------------------------- 96-12-07 ivanw Changed the handler to match the changes in the SelectionManager 96-12-06 mattwe dbview: Forced ivcFetch intent on Selects, took out error when it wasn't set. See ChetanP. 96-12-06 mattwe MSIGEN: Integrated Sysdiff INF parsing into MakeTables. Updated the properties used from the obsolete ones. Marked most of the locations that we need to do feature\component work in the code with //!! FEATURE/COMPONENT comments. 96-12-05 tracyf I've checked in all the changes that split the Selection table in the Feature, Component, and FeatureComponents tables. However, there's still work to be done in the Handler before the TestDB can be executed properly. I'll be fixing the help files as soon as possible. 96-12-03 malcolmh - Changed Conman::Add/RemoveProduct to Register/UnregisterProduct. - Added Conman::Register User. RegisterProduct now registers only product-specific info. The user info is registered via RegisterUser, perhaps at an app's first run. ----------------------------- Release 0.10.00.2329 ----------------------------- 96-11-27 johndelo The ConfigurationManager property has been exposed to automation from MsiEngine. The SelectLanguage method has been moved to MsiEngine from MsiHandler. 96-11-26 johndelo MsiEngine.Initialize no longer takes services and handler pointers. The objects are obtained as needed by CreateInstance or from the config manager. MsiEngine.Initialize takes an enum, iuiEnum type in engine.h, that specifies the UI level desired, from iuiFull to iuiNone. The value iuiBasic uses the IMsiMessage implementation in the engine default UI handler instead of loading A new property, "UI", is now recognized by the launcher, which sets the iuiEnum value as follows: UI=Full iuiFull (default, if not present) UI=Reduced iuiReduced (no modeless dialogs) UI=Basic iuiBasic (used engine message handler) UI=None iuiNone (no UI displayed) Only the first letter is examined, case insensitive. The engine object now always has a valid services and configuration manager, so no tests against 0 should be made. 96-11-26 bench Renamed almost all folder properties from *Dir to *Folder. Old properties are still being set. Added some new folder properties. See help for more info. 96-11-26 ivanw Changed the way progress messages handled in the handler. The Handler stores the name of the Action from the ActionStart message. Therefore it does not have to be included in the third field of the Progress messages anymore. Also if an action consists of equal size steps, it can use the ActionData messages to drive the progress indicators. In this case it sends one Progress message with the number of the total steps and NULL as the current progress. This signals that the Handler has to count the ActionData messages and treat them as Progress messages. 96-11-26 ivanw Implemented the ActionDone message in the Handler::Message method ----------------------------- Release 0.10.00.2326 ----------------------------- 96-11-25 johndelo Log is now fixed. Temporarily, if no handler is specified (handler="") the default, simple UI will be used instead. In the next build, the UI level will specifyable on the command line and passed to MsiEngine::Initialize. It will no longer be possible to specify DLL names on the command line (components must be registered). Necessitated by operation as a server/service. 96-11-22 malcolmh Added Register/Unregister folder to conman. Fixed bug 686. ----------------------------- Release 0.10.00.2322 ----------------------------- 96-11-21 johndelo MsiRecord as a new "Data" property typed as variant, that will transfer any MsiRecord type--see help. This greatly simplifies record object management by VB scripts. 96-11-21 johndelo The enumerations for input and return from the Message functions have changed, necessitated by the remote execution model. At the same time, missing message types were added. Message type: OLD: icmt NEW: imt Message status: OLD: icms NEW: ims Note that the message type is store in the high byte; the other bits are used to specify the buttons and icon desired. See engine.h Most callers currently specify imtError, which shows only an Ok button. Most of these uses within the actions need something else. You now must OR in the message box button set (if not simply Ok) and the default button (if not the first). When using a switch on the return value of Message, specify cases only for the non-default buttons. The default: case will catch the default button as well as imsNone (if running silently), assuming the default for quiet is the same. There is no longer a need to Assert in all the Message returns, as bad returns can be caught further upstream now. The use of a {buttons} list in error messages is no longer supported. The message attributes are defined identically to Win32. The defines in msiauto typelib Constants have been updated. 96-11-21 johndelo ODBC databases, including .MDB files, now require a valid _SummaryInformation table. Properties are read from this table in the same way as the summary info is read from MSI _SummaryInformation stream. ODBC databases will always be opened read-only by Engine::Initialize, and they can be used to generate a maintenance mode database. 96-11-21 ivanw Handler::Break is implemented. 96-11-21 chetanp provided execute functions for the progman item creation/ deletion actions 96-11-21 chetanp provided execute functions for the configuration manager interface 96-11-20 malcolmh The configuration manager no longer gives an error when trying to run an installation after aborting an installation (i.e. killing the installer process) . 96-11-20 malcolmh The C++ version of GetProductInfo now takes an rpiRecord for the product information, allowing it to return errors if necessary. 96-11-20 ivanw Changed the Handler so it uses the message box enums. Also changed the error messages in the Handler that used non default buttons. 96-11-20 ivanw Added screenreader accessibility to the popup menues in the SelectionTree. We detect when a screenreader is running and modify the UI so it uses only controls that the screenreader can read. This requires no extra effort on the autrhors side! With this addition, Darwin Window UI is completely blind accessible. 96-11-20 johndelo MsiEngine::Initialize now determines database type by content, rather than by file extension (bug 545). The logic is: 1. If it is a storage file or resource marked as MSI by SummaryInformation, then it is MSI. 2. If it has the Access DB signature, then it is MDB. 3. If it is UNC without a 3-char extension then it will be attempted to open as SQL Server DB. 4. Else it will be opened as an ODBC data source. 96-11-19 malcolmh mkerrtbl now generates an RTF file for inclusion in the help file ----------------------------- Release 0.10.00.2319 ----------------------------- 96-11-18 bench UpdateResource action defers execution 96-11-17 ivanw Implemented defered execution in Register/Unregister Fonts 96-11-16 davidmck Added a DebugLog capability to the IMsiDebug object and implemented it in the Services DLL. Writes a debug log when the normal log is not available. 96-11-16 davidmck Added Memory object tracking the CMsiCursor, CMsiTable, CMsiRegKey. Also added routines to give a list of leaked objects by type and number. Modified AllocObject to handle the fact that RTTI information does not transfer across DLLs. 96-11-16 mattwe MsiGen: Added ImportINF that reads a SysDiff INF (AddReg, DelReg and UpdateInis sections) Known Issues: The registry value column from an INF is generally too long to import into Access. The Directory_ column of the IniFile is currently the path from the INF, not looked up/added to the Directory table. This needs integration with AlanR's forthcoming work. 96-11-15 ivanw Implemented defered execution in Create/Delete Shortcuts 96-11-15 bench Removed the Selection_ column from the Resource table in the testdb. This column prevented the UpdateResources action from working on the testdb. 96-11-15 chetanp The CMsiView object now supports INSERT DELETE and UPDATE SQL stmts. Please see help on MsiView object for the sytax 96-11-15 davidfer MsiUtilities: Updated column names for compatibility with latest Darwin database format (KeyFile -> Cabinet & DiskLabel -> VolumeLabel) ----------------------------- Release 0.10.00.2315 ----------------------------- 96-11-14 mattwe MsiLocalize: Added volumecost and scrollabletext support Known issues: billboards no longer generate errors, but also don't generate to the RC file. Still to determine if this fixes the overall issue since billboards are custom controls in Darwin, and don't map to windows controls easily. 96-11-14 johndelo TestDB test database will only be released as an .MSI file. There are too many problems associated with various flavors of ODBC. We are phasing out MDB files as we cannot support full functionality without an excessive amount of work. These can still be built using MsiTable.EXE or the makefile with explicit targets, testdbmdb and tdbmacmdb. 96-11-14 bench Re-wrote SelfRegModules, SelfUnregModules, WriteIniValues and RemoveIniValues actions to defer execution. The description string for WriteIniValues changed slightly and the testdb has been updated to reflect this. 96-11-14 tracyf Thanks to the new deferred execution model for actions, a new attribute is needed for files in the File table - if a file in a cabinet is split across disks, the 'Split' attribute bit must be set. See the File table topic in the helpfile for more info. 96-11-14 malcolmh The storage object now correctly handles DeleteOnRelease on Windows 95. Previously if a database was persisted with idpPersist on Win95 the database was not actually deleted. This fix fixes a number of bugs (604, 622, 606, 648, to name a few). 96-11-13 tracyf Re-wrote the InstallFiles and RemoveFiles actions to support deferred execution. ----------------------------- Release 0.10.00.2312 ----------------------------- 96-11-11 malcolmh Modules can once again be compiled as EXEs. Multiple CLSIDs in each module are now handled. 96-11-11 thussey MAC: Some minor changes to the files copied to the release point. RegMsi is now copied instead of the defunct RegAuto. The test database (tdbmac.msi) is now copied. The proper creator signatures are now used. Also, we no longer try to copy the non-existent loader. 96-11-10 bench Re-wrote the WriteRegistryValues and RemoveRegistryValues actions to use the ixo* operations. Also, the messages logged and displayed by these actions are now of the type "Key [1], Name [2], Value [3]" rather than "Root [1], Key [2], Name [3], Value [4]" and Key includes the root name (such as HKEY_LOCAL_MACHINE\Software\Microsoft). The InstallSequence table in the testdb has been changed to reflect this. 96-11-08 thussey Darwin was inconsistent about how it named methods which returned enumerations. The OLE automation standard specifies that property names that return a collection are named the plural of the object in the collection. Also, the C++ names have been changed to be consistent. We should all adopt this standard in the future. Old Name OLE name C++ name msiPath GetSubFoldersEnum SubFolders GetSubFolderEnumerator msiRegKey GetValuesEnum Values GetValueEnumerator GetSubKeyEnum SubKeys GetSubKeyEnumerator msiStorage EnumerateStreams Streams GetStreamEnumerator EnumerateStorages Storages GetStorageEnumerator msiConfigurationManager EnumerateApplications << gone from project >> EnumerateComponents Components GetComponentEnumerator EnumerateComponentClients ComponentClients GetComponentClientEnumerator 96-11-08 bench Added MsiRegKey::Key method, which returns the full path of the key, including the root name. See help for more info. 96-11-08 chetanp Further explanation of my comments below - The IMsiView object (SQL query handler) now flags any attempt to modify a persistent column (via insert/update/delete) in a table, as an error, IF the database is NOT in the idsWrite mode. 96-11-08 chetanp put correct check on database writability in CMsiView object. Need to remove the "State" column from the "File" table. ----------------------------- Release 0.10.00.2308 ----------------------------- 96-11-08 malcolmh Fixed a bug requiring that an automation user create a services object prior to using the configuration manager. 96-11-08 ivanw If the user enters a new volume in the PathTailEdit control, the volume is added to the list in the DirectoryCombo control. 96-11-08 ivanw Changed the strings shown on the SelectionSize controlaction. The string and the size is different if the selected item is expanded or colapsed in the tree. 96-11-08 ivanw Directory combo shows the UNC path for remote volumes. 96-11-07 chetanp A note to the testers that SelfReg action has now changed to SelfRegModules and SelfUnreg to SelfUnregModules. Please see more in the help. 96-11-07 bench Changed the MsiMalloc function LcbOfBlock to GetSizeOfBlock. The code and doc differed, and GetSizeOfBlock sounds better, so all instances of LcbOfBlock were changed to GetSizeOfBlock. Any tests previously calling LcbOfBlock must be updated. 96-11-07 ivanw Removed the ErrorString DialogAttribute. (it was used for error dialogs only) 96-11-06 chetanp added shared files support in shared.cpp. Needs the Component, and the KeyFile tables and the PrepareSharedFiles and the ProcessSharedFiles actions. More on these in the help. 96-11-06 chetanp changed the ivcEnum flag values for IMsiDatabase::OpenView function. The values are now suitable for future UPDATE, INSERT and DELETE SQL support. 96-11-06 chetanp shifted Shortcut creation/ deletion to Services. need to still implement the automation wrappers. 96-11-06 thussey Deleted regauto.cpp, regauto.r, regauto.rc from the project since they are no longer used. 96-11-06 ivanw Replaced all the icons used by the selection tree control. These smaller icons will make possible to show more items in the same window. 96-11-06 ivanw Added keyboard navigation to the SelectionTree (on Windows). To open the menu for a selection item one can hit F4, or Alt-Up or Alt-Down. To close it keeping the changes hit Return, to close it canceling the changes hit Escape. With these changes I hope all the controls are completely accessible from the keyboard. Also all controls should be visible for the screen readers. Let me know if I missed something. 96-11-06 malcolmh Fixed bug 398 -- crash when the engine is initialized with a temp. db. and then the db is persisted 96-11-05 malcolmh Error strings returned via automation are now formatted regardless of whether an MsiServices object has been created. See bug 569 for more info. 96-11-05 mattwe AcmeConvert: Forced all Directory table primary keys to lowercase to avoid bogus duplicates 96-11-05 mattwe acmedb.cpp, AcmeParse, AcmeConvert: Added gfForceLower for column definitions to force the column to lower case. Used this on the section and item selections in the INF table, to facilitate tracking sections/items between installs of differing versions of the same app, if they change the capitalization Also fixed a bug from the intern's code that creates a non-valid primary key on the last line of parsing the INF. 96-11-05 mattwe AcmeConvert: Removed SummaryInput, fixes build hose (see: JohnDelo 96-11-04, removing summary input) ----------------------------- Release 0.10.00.2305 ----------------------------- 96-11-04 thussey MAC: The 10/21 build of the componetized Mac OLE is checked into darwin. Also, a new OLE Automation DLL has been checked in to allow typelib calls. IMPORTANT: Everyone running MacDarwin needs to run "\darwin\tools\macole\putmole debug" again to get the new ole build. Also, to get the automation dll to the correct place, you need to first add and environment variable on your NT machine. The name is "MacSystemFolder" and the value should be something like ":Macintosh HD:System Folder". Details are in Step II Section 3 and Step III Section 8 of the tedious but complete macsetup.txt. 96-11-04 thussey MAC: Added Apple's standard SystemSevenOrLater define to the makefile-- this allows us to use the system 7 definitions in darwin resource scripts. It also will prevent code from the old APIs from compiling, which is a good thing since the old APIs won't work on the PowerMac. 96-11-04 thussey MAC: RegMsiD now works on the mac. It registers all 4 darwin components. It takes no cmd line args, it just registers. Or hold down the option key when launching RegMsiD to unregister. 96-11-04 thussey MAC: The typelib file is now built into a resource in the automation dll just like on windows. 96-11-04 thussey MAC: The automation DLL now registers/unregisters its type library. 96-11-04 johndelo MsiSummaryInput and MsiSummaryOutput have finally been removed. Replace any test with MsiSummaryInfo, which combines the two. See help or previous relnotes. 96-11-04 ivanw Changed the VolumeCost control, so it is is fully accessible for screen readers. 96-11-02 ivanw Added DirectoryListOpen control event. This makes possible to put an open button on a browse dialog. With this the browse dialog is completely keyboard accesible. 96-11-01 mattwe AcmeConvert added three columns to the stf object table, to facilitate debugging. DarwinDirectory, ParentObjID, and DarwinSelection. They contain the most recent references during tree-walking All selections, hidden and visible are generated along with appropriate display values based on Acme logic. Their "checked" state is picked up from batch information. The Directory table is also populated with every directory reachable along the root. The Root object, and custom dialog choice are still hard coded. We'll update the automation and the docs when we get this updated. Known issues: leaks memory like a sieve. the properties for roots in the directory table need to be verified No app-search parsing yet, so the root selection is hard-coded 96-11-01 ivanw The VolumeCostList now shows the total size of the volume. 96-11-01 ivanw Added tooltips to Windows controls. Tooltips are used with buttons that display a picture instead of a text. The tooltip text is used by screenreaders for static pictures, although this text does never show up on a regular user's screen. To support tooltips and context sensitive help for radio buttons, I had to add a help field to the RadioButton table. The code will run with the old tables, that miss this column, but will generate a warning in the log. This is just a reminder, that all existing radiobutton tables should be updated. The syntax for the help string in the Control table and the RadioButton table: [ToolTip text]|[ContextSensitive help text]. The separating "|" is required even if only one of the two kinds of help strings is present. ----------------------------- Release 0.10.00.2301 ----------------------------- 96-10-31 tracyf The "TotalSpaceK" function has been added to MsiVolume, as a complement to the existing "FreeSpaceK". 96-10-31 malcolmh Added more specific error messages to the SQL query engine. 96-10-31 tracyf The handling of files-in-use has been enhanced considerably. The InstallValidate action now detects whether file costing has identified any files in use, and will put up a dialog if appropriate listing the processes "using" the file(s). The InstallFiles and RemoveFiles actions now also check for files in use, and if the user hasn't shut down the offending processes, will schedule the file(s) for replacement or removal at reboot time (note: Darwin doesn't handle automatic reboots yet). See the InstallValidate help topic for all the new details. 96-10-30 ivanw Added two new possible arguments to the EndDialog control event: Retry and Ignore. Both of these remove the present dialog, return control to the engine and return IDRETRY and IDIGNORE values respectively. 96-10-30 chetanp the msi query engine now supports the DISTINCT clause 96-10-30 ivanw The syntax of the error messages changed slightly. The header text and the error messages has been swapped. This was necessary so when the Engine appends the error number to the front of the text, it will became part of the error text and not the header. The new syntax for an error message is: Error text{button list}Header text Most error messages that we have at this point specify only the error text. These are not effected by this change. 96-10-30 ivanw Changed how the error dialog works. Now the dialog is created when needed. As a result, the MsiErrorDialog class has been removed. The ErrorDialog property determines which dialog is used. The dialog has to have the ErrorDialog stylebit set. It also has to have an ErrorText text control (this has not changed). The author has to specify the action of the buttons in the ControlEvent table. ----------------------------- Release 0.10.00.2229 ----------------------------- 96-10-28 ivanw Included logic that takes into account the taskbars on the Windows screen. Sizes of large dialogs and positions of new dialogs use only the rest of the screen. 96-10-25 tracyf The "second half" of the RemoveFiles action has been completed. In addition to uninstalling (when appropriate) files installed by the InstallFiles action, RemoveFiles now also reads a new RemoveFile table (if present), and tries to remove the files specified there. See the helpfile for info. 96-10-25 chetanp added DISTINCT support in SQL support for .MSI databases ----------------------------- Release 0.10.00.2225 ----------------------------- 96-10-24 ivanw There is a large number of control and dialog attributes that are used only from automation, but the code itself never calls them. I put all of these into #ifdef ATTRIBUTES. This flag is automatically turned on in DEBUG. In the future, if needed, we can turn it on or off independently. This cuts the handler ship size by 15K. 96-10-24 ivanw Wizard sequence allows different size dialogs (untill now all had to be the same size). The next dialog's center will be at the same point as the center of the old one was. If this puts the new dialog off the screen we pull it back so a little is on the screen, so the user can grab it with the mouse. 96-10-23 thussey makefile change: DllCanUnloadNow is now exported for engine, handler, and services (this change affects both win and mac). 96-10-23 tracyf Progress bar callbacks have been added to the RemoveFiles action - you should now see a rapid progress bar when uninstalling files during maintenance mode. 96-10-22 ivanw When a control (say a button) triggers an event in an other control it is described in the ControlEvent table. When that control wants to enable and disable the button depending on some condition, it had to be describen in the EventMapping table. The same control had to be listed in two tables with the same event. To remove this duplication, the Dialog::EventAction now looks in both tables, therefore if the control is listed in the ControlEvent table, it does not have to be repeated in the EventMapping table. 96-10-22 ivanw Split the Handler interface in two. The methods needed by the Engine are in the MsiHandler interface. Methods related to creating and destroying dialogs are in the new MsiDialogHandler interface. This split makes it easier to implement an object that supports the basic methods of the handler without supporting the methods that are used only by the automation. 96-10-22 tracyf File version handling has been upgraded in several ways: first, the Version column of the file table (and at a lower level, the CheckFileVersion Path function) now accepts one of three formats: a version, a date, or an 'overwrite directive'. See the File Table and CheckFileVersion topics in the helpfile for more info (note that the version column can no longer be left blank; you'll get an error if you do). In addition, the Version column also now accepts a 'companion file' reference to another file in the File table, instead of a version or date (again, see the File table docs for more info). Full support for proper costing of companion files (like when the directory of the companion parent changes) is included. ----------------------------- Release 0.10.00.2222 ----------------------------- 96-10-18 thussey Added IStrCat to istring.h. Changed all occurrences of strcat to IStrCat. If you have any code which calls ANSI string functions, e.g. strlen, strcat, etc, you should use the corresponding IStr* function instead. If there is no corresponding IStr* function you should add one. _c2pstr and _ptocstr can be replaced with CtoPstr and PtoCstr. 96-10-18 thussey Added /OPT:REF to the linker options for both WIN and MAC ship builds. The default compiler and linker options in msdev are different in places between the win and ppcmac compilers. Because of this more default options will probably be explicitly set in the future. 96-10-18 thussey makefile change: LIBC is no longer linked into the Install.exe ship builds on both WIN and MAC. The runtime code has been completely eliminated from the launcher. You will get a link error in the ship build if you add code which requires libc. 96-10-18 thussey MAC: Due to the changes to the way uncompressed files work, you need to rearrange the files on your mac to run the mac test database. The files "Month.jan", "Month.feb", "Month.mar", "Month.apr", and "testdb1.cab" should now be in your Darwin folder, not a subfolder. The "Cab2Mac" batch file and the macsetup instructions have been updated to reflect this. 96-10-18 thussey Change to common.h: the symbols "OLE" and "REG" now always defined for both win and mac. 96-10-18 thussey MAC: Creator types have been added for all the darwin components. These have not been registered with apple yet and may change. 96-10-18 thussey MAC: makefile change: mac automation dependencies have been updated. 96-10-18 thussey MAC: String handling has been centralized. A file macstr.cpp has been created to hold all the string implementations. CopyPascalString, CopyCStringToPascalString, and CopyPascalStringToCString have been moved from macutil.cpp to macstr.cpp. The inline string functions in macstr.h have been moved to macutil.cpp and are no longer inlined. All occurences of _c2pstr and _p2cstr have been replaced with CtoPstr and PtoCstr to allow elimination of the mac runtime. 96-10-18 thussey MAC: Added environment variable to toggle between using the shipping and componetized OLE Dlls: "COMPONENT_OLE={yes,no}". 96-10-18 thussey MAC: Changed mac GetEnvironmentVariable implementation to make environment settings universal. Instead of putting environment variables into the install.r file, they are now in a file in the preferences folder. To create environment variables on the mac, use Resourcerer or ResEdit to create a resource file named "MSIEnv" in the "Preferences" folder in the system folder. Each preference is a resource of type "STR ". The resource name is the name of the environment variable, and the resource data is the value. Note: environment variables are only implemented in the mac DEBUG builds. You cannot use environment variables in strings passed to FormatText because there is no equivalent on the Macintosh. 96-10-18 thussey MAC: The files mautostb.cpp and mautostb.h have been added to the Automation Dll. These stubs allow us to switch back and forth between the shipping OLE and the componetized OLE. 96-10-18 thussey MAC: Assert code has been centralized in files macassrt.cpp, macassrt.h. The mac MessageBox implementation has been moved from macutil.cpp to macassrt.cpp. 96-10-18 thussey MAC: Apple's "morefiles" library of file utility routines has been checked into darwin. These routines should be used whenever you have to deal with the mac file system. 96-10-18 thussey MAC: Changes to the installer. The installer now correctly copies new Darwin components over the way the windows version does. Also, the CoCreateInstance/DllRegisterServer tangle has been implemented. All runtime dependencies have been removed. ----------------------------- Release 0.10.00.2218 ----------------------------- 96-10-17 ivanw Added a new "ImageHandle" style bit to controls. This is applicable to all controls that normaly get some image from the Binary table. If this stylebit is set, the image is not fetched from the binary table, instead the text field of the control contains the handle to an already loaded icon or bitmap. This image must be loaded by some other action previously and the handle is put in the table at runtime. This can be used to create a list of all running applications with their icons. 96-10-17 ivanw Added a listview control to the Windows code. This control displays a single column of values with an icon next to each one. ----------------------------- Release 0.10.00.2215 ----------------------------- 96-10-14 johndelo In preparation for supporting temporary database table rows, some API functions have changed slightly. CreateTable and LoadTable no longer take a boolean indicating whether the table can be linked as a tree--no longer needed. (extra arg ignored by automation) CreateOutputDatabase takes an additional optional boolean argument: True to persist temporary rows, False to drop temporary rows. MsiSummaryInput and MsiSummaryOutput will be removed from the next build--use MsiSummaryInfo instead. The new MsiTable property: RowState (C++ SetRowState/GetRowState) is defined, but not implemented yet. 96-10-14 tracyf Prompting for the next removable install disk has been implemented, for both Win and Mac. If the InstallFiles action detects that SOURCEDIR references a removable (floppy or CD-ROM) volume, it will verify that the required disk is present in the drive. If not, the user will be prompted to insert the proper disk (on the Mac, if the wrong disk is in the drive, it will be ejected to allow the user to put the right disk in). The InstallFiles and MediaTable helpfile topics have been updated to explain this in more detail. 96-10-14 tracyf The DirectoryInitialize action now determines the state of a new internal Engine mode flag: iefCabinet. This flag is set if the cabinet file specified in the first Media Table record can be located in the SOURCEDIR directory. If no cabinet file name is specified (or if the 'Cabinet' column is omitted from the table), or if the specified file cannot be located, all source files are assumed to be uncompressed and located in the appropriate positions in the source directory tree. See the Media table help topic for more information. 96-10-14 tracyf Services has a new CreateVolumeFromLabel function, which searches for a mounted volume with a specified label and creates an MsiVolume object if it finds a match. This is needed for disk switching during InstallFiles, and will soon be used by the ConfigurationManager. 96-10-14 tracyf Added a SetVolume function to MsiPath, which allows the MsiVolume object of MsiPath to be replaced on-the-fly. This is also used during InstallFiles disk switching. ----------------------------- Release 0.10.00.2211 ----------------------------- 96-10-10 johndelo MsiSummaryInfo object is now finished and being used in the engine and tools. This encompasses the functionality of MsiSummaryInput and MsiSummaryOutput, which will be removed soon. Please update any code and tests. Note that by default, existing property values in the SummaryInformation stream are retained, unless deleted or replaced. 96-10-10 thussey Note: because of the Mac database fix, if you have run MacDarwin recently then before you can run the fixed MacDarwin you will need to throw out the old "Config.Msi" file in the MSI subfolder of your Preferences folder. 96-10-10 malcolmh Fixed bug in Get/Set Int16/32 on the Mac. Databases can now be written to and read from on the Mac. 96-10-10 ivanw The Windows code for ScrollableText is checked in. This is the control used to display the license agreement. Right now it displays a hardwired text. As soon as the database is able to handle long strings, it will read it from the tables like other controls. 96-10-08 thussey GetEnvironmentVariable is now implemented for the Mac. Removed all the #ifdefs around it in the code. To add an environment variable on the mac add a resource of type 'ENV ' whose name is the variable you want to set, and whose value is a string containing the environment variable's value. See install.r for examples. 96-10-08 tracyf A new "VolumeLabel" function has been added to the MsiVolume object. See the updated help file for info. 96-10-08 tracyf The SelectionManager's FreeSelectionTable function has been upgraded so that it appropriately updates the "Installed" column of the Selection table, based on the action taken during the current install. This function also now returns a Bool indicating whether there are any selections remaining in the installed state. 96-10-08 tracyf The Action table has been replaced by two (and possibly more later) new tables: InstallSequence and AdminSequence. Note that these columns correspond to the "sequence" columns that existed in the Action table. Also note that the concept of a "RemoveSequence" has been eliminated - the InstallSequence actions are responsible for installation AND removal operations. ----------------------------- Release 0.10.00.2208 ----------------------------- 96-10-07 thussey Mac test database now writes a "MacDarwin" registry key. 96-10-07 ivanw Windows dialogs are created with the close button and the close option in the system menu enabled or disabled depending if a cancel button is defined in the Dialog table. The close button, close from the sysmenu and ALT+F4 are all equivalent to hitting Escape on a dialog: it activates the designated cancel button. 96-10-07 johndelo Maintenance mode handling has been implemented in the engine and configuration manager. The selection manager does not yet save the installed state. Databases are generated and stored in an MSI folder under the Windows directory (Preferences for MAC). The configuration database name is config.msi, the product database uses the product key with extension .msi. For now, to cleanup, simply delete everything in the MSI folder. A property is set to indicate maintenance mode: "Installed" which is set to the date of the original install, format: YYYY/MM/DD HH:MM:SS. This may be used to conditionalize the UI: e.g. NOT INSTALLED. Also there is a mode bit in the engine that actions can check if they absolutely must: iefMaintenance. Most of the actions and processing shouldn't behave differently for initial install or maintenance mode. 96-10-07 johndelo New actions are added to deal with product registration. "ProcessUserInfo" action obtains the user name and org name from various registry locations and preprocesses the PID. The must be called prior to the main UI wizard sequence. The PID processing handles only CD and floppy modes, and will be fully implemented and documented in a later release. "RegisterProduct" action initialized generation of the maintenance mode database and the registration of the product with the configuration manager. Eventually it will stamp the user info back onto the floppy. This action need not be called by products that don't support maintenance mode. New summary stream properties have been defined for PID and other user info. For new databases, property 31, PID must be defined to be a valid PID for these actions to succeed. Help on PID is forthcoming. See _summary.idt in testdb for now. 96-10-07 johndelo The MsiDatabase methods Commit and Rollback have been removed. It their place is a single function that takes an extended set of options: idpCommit, idpRollback, idpSave and idpDelete. See the help topic MsiDatabase_Persist for documentation. 96-10-07 johndelo Warning of upcoming change: MsiSummaryInput and MsiSummaryOutput are being merged into a new object: MsiSummaryInfo, which will allow selective updates of individual properties. Both the new and old objects will be supported for a few releases. 96-10-07 johndelo Error codes were added to the return from MsiEngine.Initialize. See engine.h for these and for new methods of MsiEngine: RegisterProduct and GetProductKey. Some new properties were added. 96-10-05 ivanw Changed both ListBox and ComboBox such that there is an optional Text field. If the text entry is missing or the entire column is missing, the value is used for the text as well. Rewrote the combobox code so it is now derived from the listbox, saving some code. 96-10-04 thussey Change to the makefile: The mac debug build now builds the mac test database. ----------------------------- Release 0.10.00.2204 ----------------------------- 96-10-03 ivanw Added Value_Next column to the RadioButton table. This column is required, if missing you will get an error message! The values in this column define the tab order within a radiobutton group. 96-10-03 ivanw Added Control_Cancel column to the Dialog table. The control named in this field gets activated, if the Escape button is hit. The value is optional, if empty, nothing happen on Escape. If the entire column is missing, the database still funtional, but the escape will not do anything on any dialog. 96-10-03 tracyf Fixed a bug in the Handler, in which negative file cost was being treated as an unsigned, and therefore huge, space requirement. This bug would show up if your install is overwriting a file that is larger than the new file being installed (according to the size given in the File table), resulting in the out of disk space dialog popping up. 96-10-02 tracyf Checked in a bunch of Mac fixes. We can now do complete Mac setups, installing both compressed and uncompressed files. Fixes include changes in the InstallFiles action, the FDIServer module, the MsiFileCopy and MsiCabinetCopy objects, and the MsiStringSBCS::AppendString function. Also fixed all the Mac memory leaks. In addition, a new Mac TestDB has been created, and the .idt and .idb files checked in. Instructions on configuring your Mac to run this TestDB before checkins will be ready soon. 96-10-01 ivanw Added an Escape method to the Event interface. The controls call this method when they notice that the Escape button is pressed. The notification part is ready, the Escape method is not complete yet. 96-10-01 ivanw Added keyboard navigation to scrollbars. The Home, End, PageUp and PageDown buttons are used for vertical movement. Same buttons with a Shift or Control for horizontal. (I did not find any better guidelines for this) ----------------------------- Release 0.10.00.2201 ----------------------------- 96-09-27 tracyf Exposed through automation these IMsiSelectionManager functions that were previously missing: GetVolumeCostTable, AddFixedCost, RecostDirectory. Also added a bunch 'o new help topics: IMsiCostAdjuster interface, GetDynamicCost, GetVolumeCostTable, AddFixedCost, InitializeDynamicCost, RegisterCostAdjuster, RecostDirectory. ----------------------------- Release 0.10.00.2127 ----------------------------- 96-09-26 ivanw Changed the Windows UI, so that the system handles tabbing, accelerator keys and hitting the default button. As part of this change, I removed the JumpToNextFocus and JumpToPreviousFocus methods from the Event public interface and the Accelerator and IsButton methods from the Control interface. As a consequence of this change, the accelerators are defined in the standard Windows manner. If a text control defines the accelerator key to a control placed next to it, one should take care to place the text control right before the other control in the Next-order in the Control table. 96-09-26 ivanw Added support for large dialogs on Windows. If the specified dialog size is larger than the screen size, we create a smaller window and add scrollbar(s) on one or both sides. Also added mouse interaction with the scrollbars. Keyboard interaction with the scrollbars is not complete. yet. In connection with this added a FullSize dialogattribute. This read only attribute describes the size of the entire dialog, not just the window we see. 96-09-25 tracyf Internal MsiVolume caching has been modified, to avoid problems that arise when creating MsiVolumes that refer to the same network share using the UNC path one time, and by mapped drive letter another time. 96-09-25 tracyf Added the DiskNotInDrive method to MsiVolume, to assist when creating volume objects that refer to floppy disks or CDROMs. ----------------------------- Release 0.10.00.2124 ----------------------------- 96-09-23 tracyf Updated the File Table topic in the helpfile to include information about the Mac-only columns. ----------------------------- Release 0.10.00.2120 ----------------------------- 96-09-18 ivanw Modified the Initialize and Terminate methods of the Handler, so that if the initialization fails (for any other reason than being already initialized), the Handler is returned to a clean state, just like it was created, but never tuched. Terminate returns the object to this same clean state. 96-09-17 ivanw Changed the SelectionTree, PathTailEdit and DirectoryList controls such that they can be displayed even if the DirectoryManager and/or the SelectionManager is not initialized. Added DoNotCallManager stylebit to PathTailEdit, and DirectoryList controls. This style means that the controls only set a path, but do not call the DirectoyManager to set a TargetPath. In order to keep the existing databases running, the default is to call the manager and one has to set this new style bit if this is not desired. 96-09-17 chetanp fixed bugs 420 and 421 reagrding inserting null integer columns using CMsiView and the incorrect error message 1213. 96-09-17 chetanp Fixed incorrect "current row" state of the CMsiCursor when Insert, Delete, Update or Assign functions failed the first time. Used to cause the CMsiDatabase to assert the second time around. ----------------------------- Release 0.10.00.2117 ----------------------------- 96-09-16 t-robbae MsiGenerate: Added support for Macintosh files in the MakeTables Method. Now, if you are working with files in an NTFS Macintosh volume, set the property MacFiles to True. When the file table is generated, four new columns will be added: ResourceForkSize, FileFlags, Creator and Type. These table entries will be filled with the appropriate information for Mac files. In addition, the appropriate Macintosh Version data is placed in the File table's Version column. 96-09-16 chetanp Added help topices for AppSearch CCPSearch, RMCCPSearch and PISearch actions 96-09-16 chetanp enhanced the APPSearch, CCPSearch and PISearch actions so that now they allow for properties in the RegLocator, IniLocator and DrLocator tables. 96-09-16 johndelo A relative database path passed to MsiEngine.Initialize will now be appended to the folder from which the launcher was run (actually it uses the module whose resource handle was passed in). Leading dot is not supported. Memory management for the engine, storage, and summary stream objects were cleaned up to prevent leaks. 96-09-16 tracyf Now that property handling has been moved out of MsiServices, MsiPath and MsiVolume objects no longer know anything about the SHORTFILENAMES property. To ameliorate this situation, the CreatePath services method now takes an additional parameter to allow suppression of long filenames. I've updated the helpfile in a number of places to not only reflect the change, but to better explain Darwin's usage of long and short file names (check out the updated MsiPath object overview, which now details (finally!) the "shortname|longname" syntax, and the SHORTFILENAMES property topic). 96-09-16 chetanp Added table definitions for ProgMan and Shortcut tables (.idt files) in darwin\data\testdb. 96-09-16 chetanp Added tables Shortcut and ProgMan. Note that the structure of the ProgMan table has changed to be consistent with the Shortcut table. Added documentation for the ProgMan and Shortcut tables and for the CreateShortcuts, DeleteShortcuts, CreateProgManItems, DeleteProgManItems actions. 96-09-16 chetanp Added CreateShortcuts, DeleteShortcuts, CreateProgManItems, DeleteProgManItems actions. 96-09-16 malcolmh GenerateTransform now creates a summary info stream, and the engine now validates that stream. See help on GenerateTransform for the details. 96-09-13 ivanw Checked in the common and Windows code for the VolumeCostList control. This control is used on an Out of disk space dialog. Testdb is modified to show the use of this control. 96-09-13 chetanp Added IniFile and RemoveIniFile table definitions (idt files) and corresponding help. 96-09-13 chetanp Changed WriteIniValues, RemoveIniValues actions. The WriteIniValues action now works on the IniFile table only for the "install" mode. The RemoveIniValues action works on both the IniFile table (during "uninstall" mode) and the RemoveIniFile table (during "install" mode). 96-09-13 chetanp Corrected and added documentation of the Registry, RemoveRegistry tables and the WriteRegistryValues, RemoveRegistryValues actions in the action.rtf, tabledef.rtf files 96-09-13 chetanp Corrected the Registry and RemoveRegistry table structures (.idt files) in darwin\data\testdb. 96-09-13 chetanp Changed WriteRegistryValues and RemoveRegistryValues actions. The WriteRegistryValues action now works on the Registry table only for the "install" mode. The RemoveRegistryValues action works on both the Registry table (during "uninstall" mode) and the RemoveRegistry table (during "install" mode"). Also made changes to remove the redundant GetExpandedString function in the Engine. ----------------------------- Release 0.10.00.2113 ----------------------------- 96-09-12 thussey Minor changes to the makefile/dependencies (these actually occurred yesterday, I forgot to document 1) Removed _handler.h from the engine deps 2) build now imports the freshly built error.idt into the testdb 3) allow a separate set of ship compiler optimizations for mac and windows 4) common.h supresses bogus warnings in mac ship build 96-09-12 thussey Checked in new diamond.exe which can correctly build mac cabinets. This new diamond.exe is also synched to the current diamond slm tree. 96-09-12 johndelo The type library for Darwin automation is now stored as a resource in the automation DLL, MsiAuto.DLL or MsiAutoD.DLL, and is registered by the DLL when it is self-reg'd, either by install.exe or regmsi.exe. Unregistration of the type library when the DLL is unregistered is commented out, as the OLEAUT32 in NT 3.51 does not support UnregisterTypeLib. This will be enabled when NT ServicePack 5 is released, which updates that DLL. The SampleTool makefile has been fixed to do the same, and the one line added to the .CPP file: "#define REGISTER_TYPELIB GUID_IID_IMsiSampleToolLib". Other tools need to be updated. With Excel95, you still need to go to Tools/References, but the typelib should always be ready to be checked on. Note that if a new version of MSI is required it will be installed to you system directory. To debug from you build, run "REGMSI D" from your build directory to reregister those components. 96-09-12 tracyf "Selection_Shares" functionality has been added to the SelectionManager. See the updated Selection Table topic in the helpfile for all the details. 96-09-12 chetanp Added IMsiServices::GetModuleUsage functionality 96-09-11 johndelo Property handling is now in MsiEngine and has been removed from MsiServides, except for SetPlatformProperties which now requires a table object. The FormatLog and CreateDefaultPropertyTable are obsolete and have been removed. Text string formatting is now done in two stages: MsiRecord.FormatText formats its template string, substituting numeric parameters with record field values. MsiEngine.FormatText formats any string, substituting property values and environment variables. EvaluateCondition, which uses property values, had to move from services to MsiEngine. 96-09-10 ivanw Changed the controls and dialogs such that if their caption contains some property, the text updates when the property changes. In order to receive the update message the control has to specify some property in the Control table. This may change when we redesign the Control table. The limit of the text size for the edit fields and comboboxes has to be defined using {}. I.e. if you had [40] for the limit in the text field of the Control table, it has to be changed to {40}. This is necessary because of the way Record::FormatText works. 96-09-10 t-robbae MsiUtilities: - For future code compatibility, removed all direct reference to 'Darwin' in the code, replacing it with the text 'MSI'. This extends all the way up to the Automation layer, so any test scripts out there which previous included calls to DarwinComponent or IncludeDarwin should now be changed to MSIComponent and IncludeMSI. 96-09-10 t-robbae MsiUtilities: -The Launcher Linker portion of the tool has been added. This enables the linking of a virgin launcher.obj with an RC file and various CustomActions into one finished executable. See help for more info. -Both LoadProp and the LauncherRc File Creator now support the storing of MSI Component files within the launcher. -The code for LoadProp has undergone a major overhaul. Watch out for any new bugs that may have cropped up in this code change. ----------------------------- Release 0.10.00.2110 ----------------------------- 96-09-09 johndelo Darwin version bumpted to 0.11 (property stream changes). Engine will reject databases of version 0.10. 96-09-09 johndelo The launcher now recognizes a property called INSTALLER, that indicates the path to the folder containing the Darwin components. Its value may be either a subpath beneath the launcher's folder or a fullyl-qualified path. If not present the launcher looks for components in its own folder. 96-09-06 tracyf HelpFile documentation has been updated for the Condition Table and for the ProcessConditionTable method. 96-09-06 tracyf The IMsiSelectionManager::ResolveSelections method is obsolete and has been removed from the COM and automation interfaces. 96-09-06 ivanw Added FormatText function to the Engine interface. This new method combined with MsiRecord::FormatText provides the same functionality as the old MsiServices::FormatText. Changed all calls to FormatText to use the new one, except in Services::FormatLog. As soon as FormatLog is migrated from the Services to the Engine, we will be able to remove FormatText from the Services and with it all the methods getting and setting properties. The new Engine::FormatText is significantly smaller than the old one. In case of correct syntax it should produce the same output (if combined with Record::FormatText). If there is a syntax error in the string the unmatched square bracker or curly brace is left in the text. ----------------------------- Release 0.10.00.2106 ----------------------------- 96-09-05 johndelo The automation dll, MSIAUTO.DLL or MSIAUTOD.DLL will be installed along with the other components by the loader if present in the same folder. No error will be generated if not present (error will be generated if copy error). The Darwin components that are to be installed may be optionally LZ compressed. 96-09-05 johndelo The default database name used by the launcher/loader is now INSTALL.MSI, not TESTDB.MSI. Either rename your database, set the resource, or use command line DATABASE=... 96-09-05 johndelo The launcher/loader, INSTALL.EXE or INSTALLD.EXE, now will install Darwin, ship or debug respectively, if needed. The logic sequence is as follows: 1. Explicitly specified components are loaded. Install fails if any of them fails. 2. Remaining components are attempted to be created by CoCreateInstance 3. If all not created, components residing in the system directory are re-registered. 4. If still not all created, all components are copied to the system directory, registered, and created. 5. If any of the components return version mismatch with database, all are installed if not already done. Prefix the action name, normally "Install" with an at sign, '@' forces Darwin to install. A null action name, or "@", will install Darwin as necessary, but will not commence any install. This particular launcher expects to find the Darwin components in the same folder as the launcher. Separate launcher will be built for internet and other needs. Does not yet install Darwin on the Mac. Help topics are forthcoming. The DEBUG launcher, INSTALLD.EXE will install and use the DEBUG components. The SHIP launcher, INSTALL.EXE will use whichever components are registered most recently. 96-09-04 malcolmh - The summary information stream has changed. See "What is the summary info property set?" in the help file for specifics. - The engine now validates information in the summary information stream. Note that the _summary.idt file for the testdb has been updated to reflect these changes, and will pass all validation tests. If you have created other databases you can import the new _summary.idt into your database to make things work. The following engine does the following validation: The MSI Tag field must contain the correct tag (e.g. "MSI Product" for a product database). The MSI database and engine versions must be compatible. The platform specified in the Template property must be correct. One of the languages specified in the Template property must exactly match an available language on the system (usually English). In future releases more multi-language support will be added. 96-09-04 tracyf The InstallFiles action has been fixed up so that proper progress messages are once again being sent during file copying (i.e. progress bars are working again). 96-09-04 thussey Modified make.bat and the makefile to allow mac builds on machines without otools. OTools contains alpha versions of MacOLE 2.10 while VC4.2 has the shipping MacOLE 2.06 headers. Added the file oldole.h which enabled the shipping MacOLE headers to work with Darwin. 96-09-03 ivanw Removed the following methods from the Handler public interface: GetEngine GetServices GetDatabase CursorCreate TreeCursorCreate GetUIText Added a GetEngine method to the Event public interface. ----------------------------- Release 0.10.00.2103 ----------------------------- 96-08-30 tracyf Helpfile documentation has been updated for the CostInitialize, FileCost, and CostFinalize actions, and for the 'File' table. 96-08-30 tracyf To avoid potential confusion, the new InstallInitialize action has been renamed to InstallValidate (the testdb and docs have been updated). ----------------------------- Release 0.10.00.2030 ----------------------------- 96-08-29 mattwe Acme2Msi (aka Beagle) No more rollback or commit Convert now requires a database reference, rather than a filename Exposed C++ interface for AcmeConvert to simply parse STFs/INFs into named tables. This will allow you to do several passes with different STFs/INFs and get the results in different tables It's a quick hack that'll get cleaned up and exposed to VB after I get back. (9/8) Known problems: Memory leak, and calling SelectionsPass is short-circuited to NYI. Checked in intermediate files that I wasn't ready to release to help BenCh. ----------------------------- Release 0.10.00.2027 ----------------------------- 96-08-26 t-robbae Utilities: Launcher RC file creator now fully implemented. See help for full details on use. 96-08-26 johndelo SOURCEDIR now defaults to the location of the launcher (actually to the folder of the HINSTANCE passed to MsiEngine.Initialize). Relative paths are supported, as long as they don't begin with the dot notation. A new MsiEngine method, ResolveFolderProperty, was added to handle source properties. See help. 96-08-26 johndelo The default database open mode for MsiEngine.Initialize is read-only if the PID_SECURITY is not set. This summaryinfo property, 19, needs to be 0 to open read-write. 96-08-26 thussey Changed handler code to get properties from engine instead of services. 96-08-26 johndelo The MsiServices Set/Get property methods and the Property automation method have been moved from the services class to the engine class. All source modules in the engine have been updated. For a SHORT time the methods remain in services to allow other code and tests to be transitioned. See the help and engine.h for details. 96-08-25 tracyf Dynamic file costing has been implemented. This involves changes in the CostInitialize and CostFinalize actions, and the addition of the FileCost and InstallInitialize actions. The CostInitialize documentation gives an overview of using the costing actions, and more documentation will be added soon. 96-08-23 bench Removed argument to MsiDirectoryManager.LoadDirectoryTable that specified whether to create a column for source paths or not. That column is now always created. 96-08-23 thussey Added inline bottlenecks to UI objects to make it easier to move the Get/SetProperty interface from the services to the engine. 96-08-23 thussey -- Turned on -Gy (dead code stripping) and -Os (optimize for size) in the makefile for both Windows and Mac builds. -- Partial implementations of Mac list box and icon controls. Only enough to support the demo that ended up not showing the Mac version. It isn't worth bothering to test them yet. -- Added STRICT_CONTROLS, STRICT_WINDOWS, STRICT_MENUS, and STRICT_LISTS definitions to the Mac builds. These are helpfull for sorting out Copland/System 7 issues. -- macutil2.c & h have been removed from the project. The window management routines are now in the handler code, and the rest is folded into macutil.cpp -- An odd macutil.h/cfile.h header dependency has been sorted out. -- Added some new files to the project. These are relevant only to the Mac. All these extra files are needed to give a layer of abstraction necessary to support the eventual Copland OS. Due to my total lack of creativity, they have icky names: macdarc.cpp & h contain defprocs specific to Darwin. macdproc.cpp & h contain the defproc base classes. macdpint.h contains internal definitions used by the defprocs. ----------------------------- Release 0.10.00.2023 ----------------------------- 96-08-20 t-robbae Utilities: Added LogFile property to object. Now LogFile is only generated when set to a full path where it is to be generated. See Help for more details. Added Documentation for future SLM Database operations. These don't work yet, and shouldn't be attempted, but their basic skeletons are there, both in automation and Help file information. 96-08-20 malcolmh - Added support for specifying how errors are handling during transforming. A parameter should now be passed to SetTransform to indicate which conditions are treated as errors and which as warnings. See the help file for SetTransform for more information. ----------------------------- Release 0.10.00.2020 ----------------------------- 96-08-19 t-robbae Utilities Object: (some information reentered here after SLM error ate my last update of the release notes). Fixed error in OpenDatabase. Now the Summary Information stream is properly copied to the new database when an output database is specified, (note that the method now only supports MSI and Access databases). Eliminated the idtRoot and idtShare enumerations once used in setting directories. Now the idtSource should be the parent directory of all the source files in the Admin Image (which can now be generated by the generate tool). Modified "Attribute" in the automation layer. Attribute is now a property which accepts either strings or integers on the rhs of the assignment operator. These it converts automatically to their appropriate value. The set and record arguments have been eliminated from this automation layer property. They are now controlled by the assignment operator like all properties. See help for more details. 96-08-18 davidmck Added FCheckBlock and GetSizeOfBlock functions to ole automation to allow testing to get more information from blocks. Also checked in code to warn when freed objects are being called rather than crashing. ----------------------------- Release 0.10.00.2016 ----------------------------- 96-08-14 bench Many changes to MsiDirectoryManager. First, CreateSourcePaths is now implemented, and the creation of the source paths is removed from CreateTargetPaths. Also, SetTargetPath has been modified so that when a path is changed, all children or duplicates of that path are updated appropriately. Also, changes to the way the directory table is interpreted when creating source paths have been made. Before, the source paths for each entry were just set to SOURCEDIR. Now, the source is assumed to have the directory structure defined by the Directory Table. When resolving non-root source paths, the values of the Directory_Parent and DefaultDir fields are used and no properties are checked like they are when resolving target paths. When resolving root source paths (those records in the Directory Table with null parents or parented to themselves), the full path of the directory is assumed to be the value of the property given in the DefaultDir field. For example, the following records resolve to the following source and target paths (assuming the ROOTDIR property = C:\ and the SOURCEDIR property = C:\SOURCE): DIRECTORY PARENT DEFAULTDIR TARGET SOURCE ROOTDIR SOURCEDIR C:\ C:\SOURCE excel ROOTDIR Excel C:\Excel C:\SOURCE\Excel Resolving the source directories this way allows multiple roots for the source, where different parts of the source may even be located on different servers. The \darwin\data\testdb\director.idt file has been updated and the location of the test source files has moved from \darwin\data to \darwin\data\test\months so that an install using testdb will work with these changes. 96-08-13 johndelo The message headers have been removed from the error messages defined by the IError(...) macro in the header files, i.e. Error [1]. The appropriate header is applied by IMsiEngine::Message when the message if formatted. The actual header is determined by the message type specified in the call, and references reserved, low-numbered messages in the Error table. See Error table help. The DEBUG builds still do not use the error table; they use the strings from the IError(...) definitions (the DEBUG build still makes sure that the table exists). Note that the build produces a listing of all ship and debug errors in a file called MSIERROR.TXT (produced by the mkerrtbl.exe tool. ----------------------------- Release 0.10.00.2013 ----------------------------- 96-08-09 t-robbae LoadProp in the Utilities tool has been modified to be more flexible in its operation. Now if no cabinet files are listed in the prop file, it is not necessary to set a WorkDirectory and Open a database. An error will be raised if the prop file does include cabinets and these two preparation items are not performed. Note that this means that the path given for a database in the prop file is now used in all cases except when Cabinets are to be stored in the resources. When cabinets are stored, the path in the prop file is ignored as before and the open database is stored instead. These changes are all outlined in the help file. 96-08-09 malcolmh Changed CreateStorageFromMemory in the services object. It now takes the size of the memory block as its second parameter and only supports read-only storages. 96-08-09 malcolmh - Added the GenerateTransform and SetTransform members to the Database object. - Added support for extracting a database stored as a resource in the launcher ----------------------------- Release 0.10.00.2009 ----------------------------- 96-08-09 t-robbae Numerous changes to the utilities tool: LoadProp now works correctly. Note that currently a workdirectory and a database must be opened before the propfile can be loaded. LoadProp now accepts TRANSFORM files as well as Databases and cabinets to store as resources. PassType now accepts enumerated values of iptRough and iptFine instead of its old string values. OpenDatabase now as a second argument accepts the full path to a new file in which to write an output database. If this string path is left out, OpenDatabase attempts to open the first file argument as read/write. OpenDatabase may now open other database types besides .MSI databases so long as the second argument is included so that a new .MSI database is eventually created. (Can't successfully deal with an Access database opened as read/write). Note that with David Gonzalez's permission, the utiliteis tool DOES NOT support a setable Database property in which utilites can be passed a database object itself. This is because utilites must have exclusive control over its databases to open and close them as needed, and this cannot be done if a client is holding onto a reference to the database object. This still works because utilities should always come at the end of the tools process and no one should be modifying the database after this tool anyway. 96-08-09 ivanw Modified the selection tree such that it uses one large icon next to each item (instead of two smaller ones) This one icon shows information both about the present state and the future state of the item. Changed the icons and the text sucht that no distinction is made between different kind of source media except in the icon on the path line. Changed such that if an item is unselected, the children are collapsed and hidden, the user can not expand it. The control remembers the previous state, and if the item is selected again, it expands the same way it was before. The name of the items whose selection state will change is displayed in bold. If the user does not change the selection the text is plain. 96-08-08 tracyf The IMsiFileCopy interface now supports decompression of files from cabinets stored as Launcher resources (not supported through automation yet). See the Media Table and MsiFileCopy.ChangeMedia help topics for details. 96-08-08 tracyf The MsiFileCopy object has changed significantly! First, the CreateCopier interface has moved from MsiPath to MsiServices. Also, the MsiFileCopy::ChangeSource interface is now called ChangeMedia, and has new arguments. The MsiFileCopy::CopyTo object takes a new argument (to specify the source path object), and finally, CopyTo now allows the specification of separate source and destination file names for uncompressed files. All of these changes are documented in the updated help file. 96-08-07 johndelo The Darwin loader DLL is GONE, msildr.dll and msildrd.dll. The 7K launcher and 27K loader are combined into a single 11K install.exe, ship build. (this arithmetic baffles me). This module did not self-register, was not a COM component and was not version-safe, and it was not viable for use with an Internet installer. It wasn't used by automation either. 96-08-07 t-robbae I've made some changes to the way LoadProp and OpenDatabase behave. OpenDatabase not accepts a new file value stating the name for a new file to be created in the work directory. The old one argument OpenDatabase still works as before. See Help for more details. LoadProp must now have the WorkDirectory set and a database opened in order to operate. There are more structural changes inside the method, but these should not affect its use on the surface except in the way property files are written. See Help for more details. ... Also note the changes to the Attribute method I forgot to mention on the last release. Attribute now take enumerated constants to specify the attribute type. See Help for more details. ----------------------------- Release 0.10.00.2006 ----------------------------- 96-08-05 johndelo Error handlling has been alterered for core Darwin components: Debug modules set the error templates directly and do not use the database Error table. Ship modules still lookup error codes in the Error table, which now has only Error and Message columns. Debug messages, idbgXXX are not in the Error table and receive a generic message in Ship builds. Most of the messages should be converted from imsg to idbg debug messages, as they can only occurs due to authoring or coding errors. This will be an ongoing process. This does not affect tools, since their error templates are in their resources. Things will be cleaned up a bit more when the engine error handling is finished. 96-08-03 ivanw Added code and changed the testdb such that the Browse dialog can be triggered from the Selection dialog to modifiy the path of an item. The name of the browse dialog is authorable, thus if we have more than one selection dialog they can use differently authored browse dialogs. 96-08-03 ivanw Added HandleEvent method the MsiDialog and the MsiEvent classes. A control uses this method to notify the publisher of an event that it is time to trigger the event. 96-08-03 ivanw Added a one-icon option to the SelectionTree. By setting a stylebit the author can choose to show only one icon. This might be preferred in a first instal when all the first icons would show the absent state. 96-08-03 ivanw Added controlevents to SelectionTree control. As the sample shows in testdb information about the selected item is displayed in several controls subscribing to events published by the selectiontree. 96-08-02 mattwe Rollback/Commit now remove the copied file Parses the STF and INF into tables: Acme-HDR (stf header) Acme-OBJ (stf objects) Acme-INF (inf files), and Acme-SMD (source media descriptor). What's Broke: running "Convert" twice in a row without a new AcmeConvert object asserts. Parsing mangled stfs/infs isn't handled at all. Long File Names column in Acme-INF doesn't include path from ShortFileName MsiTable has been wobbly importing/ exporting really large (OfficePro '95) tables. Still investigating. Works fine with Works' files from \\products. DEBUG has all memory tracking on, so is really slow. SHIP handles Office in ~8 seconds on my p6-200. Localized stfs/infs with multibyte chars is broken. 96-08-02 johndelo MsiString object has two new methods: UpperCase and LowerCase. See help. These are optimized to convert inplace when only one reference exists. ----------------------------- Release 0.10.00.2002 ----------------------------- 96-07-31 ivanw Changed PublishEvent so the argument is a record not a string. Since this argument gets passed to a Control::Attribute function, that takes a record, this is more general this way. Also changed the SetText and SetProgress control attributes. 96-07-31 ivanw Added UIText table. This table contains the localized text strings used by the UI that have no home in some other table. Added a GetUIText method to the handler to get these strings. ----------------------------- Release 0.10.00.1930 ----------------------------- 96-07-29 johndelo LEGO builds are now using LIBCMT.LIB for runtime library, insteal of LIBCMTD.LIB which has no codeview info. In fact, only the LIBCMT in OTOOLS has codeview info. not that from VC4.0 or VC4.2. 96-07-29 ivanw Changed the ProgressBar so it can take different range values. The default is still 1024, if none is specified. The progress message can also specify the name of the action, this way we can have more than one ProgressBar on the same dialog showing the progress of different actions. 96-07-28 ivanw Changed the way icons are loaded. With two style bits the author can specify what size image of the icon should be loaded. Also added a static icon control type. With these modifications the bitmaps and icons on different kind of buttons should be complete except graying the images on disabled buttons on NT3.51. 96-07-26 ivanw Rewrote the Bitmap class such that it uses a static control on Win95 and NT4. Also added the fixedsize option to bitmaps on all Windows systems. 96-07-26 ivanw Fixed the accelerator keys in the Windows UI. You can put an accelerator key in the text of a control, even if the text is not shown on the screen. Accelerator keys in static text are displayed (as underlined) but not functional, since the text control can not take focus. Using these two facts you can assign an accelerator key to an edit field (whose corresponding text from the table is not visible) and to show it to the user you can put the same accelerator in the associated text control. If this sounds too complicated, look at the first dialog of testdb, and it will be clear. One can put accelerator keys to the text field of any control except the bitmap and the (not yet implemented) icon control. The text field in those is the name of the binary data. This is not a real limitation, since these two controls can not take focus anyway. ----------------------------- Release 0.10.00.1926 ----------------------------- 96-07-25 ivanw Added a Reset method to dialog, that resets all the properties and controls to their state at the creation of the dialog. Added reset buttons to the dialog in testdb, to show how this works. Also added Undo to indirect controls. 96-07-25 ivanw Modified all controls such that indirect properties get updated on the same dialog. Added two new dialog to testdb to show and test some of the cool things that can be done with this. (based on Tim's idea) 96-07-25 ivanw Modified the ListBox, ComboBox and RadioButtonGroup classes such that they can be created with a property that has no initial value. The controls come up with nothing selected initialy. After the user selected something, there is no way of going back to unselect. If the control is tied to an indirect property, that property must have an initial value! 96-07-25 ivanw Added a new stylebit to the ComboBox control, creating a control with not edit field. This way the user can select from a list of predefined values, but can not add a new one. 96-07-24 ivanw Since many found calling AddControl with Null strange, I added a new method, FinishCreate to the Dialog interface. One should call this when all the controls are added. In order to keep the old scripts alive calling AddControl with Null will still do the same. ----------------------------- Release 0.10.00.1923 ----------------------------- 96-07-22 ivanw Changed all the handler classes (except the Mac specific ones) such that they use PComPointers as member data. If I done this correctly, it should result in no visible difference in the way things work. Since every object was changed in the process, it needs testing. 96-07-20 ivanw Changed the testdb such that to run AppSearch one has to set the APPS_TEST property. To run CCPSearch one has to set the CCP_TEST property. This way the rest of us don't have to sit through these actions every time we run testdb. 96-07-19 johndelo Commit MUST be called on MsiDatabase objects before their destruction in order for changes to be preserved. Else, the default behavior on destruction is to Rollback the database. Previously it would Commit on destruction which led to an abundance of corrupt databases. Note that the engine will call Commit or Rollback on its Terminate method, depending upon the arg passed. MsiDatabase.CreateOutputDatabase now transfers binary streams from both MSI and MDB databases, thus generating an installable database. ----------------------------- Release 0.10.00.1919 ----------------------------- 96-07-18 johndelo Engine.Terminates now takes a required boolean argument: True to Commit, False to Rollback the database, and Terminate now writes SummaryInformation properties to the database file created by CreateOutputDatabase. Note that CreateOutputDatabase does not yet transfer binary streams (bitmaps). The Database.Storage property was added for use by the MsiEngine to access the output storage object. ----------------------------- Release 0.10.00.1916 ----------------------------- 96-07-15 johndelo Error handling added to SampleTool, need to do the same for other tools. Worked around ODBC shutdown bug which caused random crashes and app exits. 96-07-14 ivanw Added PropertyChanged to MsiDialog interface. It is called when a child dialog is destroyed and control returns to the parent dialog. This way we can update the controls in case the child window changed the value of some property. 96-07-14 ivanw Completely rewritten Services:FormatText using MsiString functions instead of buffers. Also added some new functionality. See help page for details. Also checked in format.xls a small script to test the function. Considering the large number of cases that can go wrong in this function, it needs more testing. ----------------------------- Release 0.10.00.1912 ----------------------------- 96-07-11 ivanw Added a large number of new pages under the new "User Interface Topics" heading describing all the dialog types, control types, style bits, attributes, and controlevents. 96-07-11 johndelo If MsiEngine.Initialize is given an empty string for a database path, it will construct a temporary database with an empty Property table. This functionality is for testing purposes, replaced the previous method of using CreateDefaultPropertyTable (or whatever it is called) 96-07-09 ivanw msihndlr.xls and the text version of the same file msihndlr.bas, are modified to use the new engine initialization method. They are intended to show the correct sequence of initialization and termination of the objects needed to use the Handler object. ----------------------------- Release 0.10.00.1909 ----------------------------- 96-07-08 johndelo The CreateDestinations action is obsolete, use DirectoryInitialize instead. The old action is temporarily supported by simply calling the new one. MsiServices.CreateDatabaseFromStorage has been exposed to automation. It has been used internally, and requires that the storage object contain valid database data. 96-07-05 johndelo MsiEngine::Initialize now takes services, handler, database, and propertyfile properties formerly passed as parameters. Check the Help topic. Note that the database path is passed in, not the object. The engine now validates the file before creating the database object. MSI databases now must have a summary info property stream with the PID_TITLE property set to "Installation Database 0.10" in order to work with this version of Darwin. For ODBC databases, the information is put in the _SummaryInfo table, but that table is not checked in this release--will be added soon. 96-07-05 ivanw To avoid further confusion, removed the Initialize and Terminate methods for Handler from automation. The Handler object has to be initialized and terminated through the appropriate methods of the engine. 96-07-05 davidmck Changed code in CMsiMalloc to give information on IMsiRecord object. 96-07-03 johndelo OpenView intent flag ivcTableAll has been removed and is no longer supported. Child MsiStorage objects now keep a reference to their parent objects to prevent their premature release. 96-07-03 thussey The file controls.h has been deleted from the project since it is no longer used anywhere and contains obsolete definitions which get in the way of global searching. 96-07-02 ivanw Since we don't build the old UI anymore, the previous file name conflicts are removed. Hence _control.h is renamed to control.h and ccontrol.cpp is renamed control.cpp. 96-07-02 thussey Added two files: mactool.cpp and mactool.h. These files implement stack-based wrapper classes for Mac Toolbox data structures. ----------------------------- Release 0.10.00.1902 ----------------------------- 96-07-01 johndelo RegMsi.Exe tool has been fixed an extended to register all Darwin and tool DLLs. Type regmsi ? to get help. The debug version regmsid.exe works identically except that it contains debugging symbols. Both can register modules of all builds. The module.h and tools.h headers have been cleaned up a bit, requiring minor changes in the include sections of all module files (all checked in). 96-07-01 tracyf Alert: significant changes have been made to the File and Media tables. In the Media table, the 'Noncabinet' and 'Split' columns have been eliminated (doesn't hurt anything if they still exist in your table). Files are now marked as uncompressed by setting an Attribute bit in the file table (until you mark your uncompressed files, if you've got any, you'll get errors saying this file or that can't be found in a cabinet). See the updated docs for these tables in the HelpFile. 96-06-29 davidmck Added code to step back two additional callers in the memory debugger for a bit more information. Added code to check all memory blocks for corruption. ----------------------------- Release 0.10.00.1828 ----------------------------- 96-06-27 ivanw The DirectoryCombo and VolumeSelectCombo controls display the volumes whose type is specified in the stylebits. For now the removable and the floppy are the same. So if you set both bits at the same time you are asking for trouble. In the future the path/volume object will distinguish between the two kinds of volumes. 96-06-26 ivanw ControlEvent table modified so the push of a button (or other control) can trigger more than one event. Their order is determined by the new Ordering column at the end of the table. This column is REQUIRED. If the column is missing the UI will fail. Leaving the column empty is OK, if a button triggers only one event or you don't care for the order. ----------------------------- Release 0.10.00.1825 ----------------------------- 96-06-24 ivanw Browse dialog completed, except some cosmetic issues on NT3.51. The dialog involves three new controls. The PathTailEdit control is an edit control that is design to modify the last segment of the path. If a complete path is entered, it recognizes that and sets the entire path. Also if several segments of the path are entered, it accepts it as long as the whole path makes sense. The DirectoryCombo and DirectoryList controls are designed to select the path except its last segment. They also deal with phantom pathes and creating/renaming folders. All the above controls verify if the selected path is valid. The VolumeSelectCombo is a combobox showing all volumes. Added a new style to the progress bar, so it can be displayed in the solid, continuous form as before or the chunky stile of Win95. If there is a text specified in the Control table for a progress bar, the control will publish a controlevent of this name. When the progress bar is complete (gets to 100%) it enables all controls subscribing to this controlevent. The Handler::Message function in case of a progress message checks the record if there is an action name in the third field. If there is, it publishes a progress event by that name. If there is no name there, it publishes a default event. This way we can have more than one progress bar at the same time, tracking the progress of different actions. ----------------------------- Release 0.10.00.1821 ----------------------------- 96-06-19 tracyf Made several fixes to bring the Mac MsiPath and MsiCopyFile objects back up to approximate par with the Windows versions: fixed several MsiCopyFile::CopyTo bugs (cabinet version), updated the docs, and fixed a Mac bug in MsiServices::GetLocalPath. I also checked in a new version of MsiPath.bas (in the Darwin\tools directory) which now tests all MsiPath/MsiFileCopy interface functions, both the Mac and Win. ----------------------------- Release 0.10.00.1807 ----------------------------- 96-06-07 johndelo SumInfo.Exe is now in the build, a simple tool that loads Services via OLE and displays the SummaryInformation stream properties. ----------------------------- Release 0.10.00.1804 ----------------------------- 96-06-04 tracyf Fixed bug 164 (allowing the MsiPath::GetLocalPath function to treat its parameter as optional). 96-06-04 tracyf Last build, in response to bug 170, I erroneously changed the MsiPath::CopyTo function to use field 1 of the passed in record as the source file name for uncompressed file copying. For this build, I've changed it back so that both the source and destination file names are taken from field 2. 96-06-02 tracyf Fixed the following bugs: 157, 167, 170, 173, 182, 186, all dealing with MsiPath functionality or documentation. 96-06-02 tracyf A new function, ReadResource, has been added to the MsiPath interface. This allows for automated testing in conjunction with the UpdateResource function, and also may prove useful in the future for various install actions. The helpfile has been updated to include ReadResource documentation. 96-06-02 tracyf The MsiPath::UpdateResource function has been fixed so that it now works with both 16 and 32 bit executables (previously it was badly broken for 32 bit files). The docs in the helpfile have also been updated. ----------------------------- Release 0.10.00.1731 ----------------------------- 96-05-23 johndelo MsiServices::CreateMsiStorage has been renamed to MsiServices::CreateStorage, fixing misnaming in help/tlb. AUTOCOM.H has been moved to the common INC directory, and can be used for any automated module. All common module code is now contained in the headers: module.h, autocom.h, and _assert.h. See file header comments. Initial sample tool code checked in to SRC\TOOLS\SAMPTOOL. 96-05-30 tracyf The following bugs have been resolved (most all involving MsiPath or related services functions): 187, 188, 191, 192, 193, 199, 202, 203, 204, 212, 213, 218, 219 96-05-30 tracyf Added support to the InstallFiles action for handling files in use: if a file to be replaced is in use, it now gets added to the restart list (in the registry on NT, or in WININIT.INI on Windows 95), to be replaced at restart time. Of course, Darwin does not yet support automatic restart at the end of setup, so you'll have to reboot manually to see the effect. 96-05-28 davidmck Added GetDebugFlags routine to the debug allocator so you can check on what flags are set. ----------------------------- Release 1.0.1724 ----------------------------- 96-05-23 johndelo Version numbers have been changed for all Darwin components to 0.10.0.. This number will be bumped (minor version) each time we break database compatibility. We we RTM Darwin the first time, the version will then be bumped to 1.0. Following the ACME convention, the version numbers reported as properties by the various components will contain only 2 fields for SHIP build, e.g."0.10", and 4 fields for DEBUG builds, e.g."0.10.0.1724". 96-05-22 johndelo All of the Darwin DLLs now support the standard OLE entry points and will self-register to allow them to be created with CoCreateInstance. A new tool is available, RegMsi.EXE, to register any or all of the components See help file. (RegMsiD.EXE and REgMsiL.EXE to register DEBUG and LEGO build components). The services, handler, and engine all set their version properties: VersionServices, etc. Asserts have been reworked to avoid inline expansion, which was bloating debug builds. 96-05-22 ivanw Icons are working on pushbuttons, radiobuttons and checkboxes. testdb is expanded by several dialogs to test these new styles. The additional dialogs show up only if the property UITEST is set. The checked in code and testdb contain some yet unfinished code for MsiBrowseCombo, but it should not hurt anything else. ----------------------------- Release 1.0.1717 ----------------------------- 96-05-16 johndelo For creating summary streams on newly built MSI databases, importing a table named "_SummaryInformation" will stream its data pairs to the standard property stream. (For ODBC database, a standard table will be created.) See help under ImportTable. The new file under darwin/data/testdb is "_Summary.idt". 96-05-15 johndelo ImportTable and ExportTable are now fully functional with .MSI databases. MsiTable.EXE has been updated to handle .MSI databases as well. Note that the text archive format spec "b0" has been changed to "i0" (Boolean data type). The old format "b0" will still be accepted for a few builds. The makefile now builds TestDb.Msi as well as TestDb.Mdb. Install may be run from either. 96-05-15 chetanp 1. Added "iField" parameter to ReadIniFile to be able to access individual fields in an .INI file 96-05-15 tracyf Resolved bugs 166, 170, 174, and 181. Of particular note are changes to the MsiPath::CreateCopier, MsiFileCopy::CopyTo functions. See the updated help file for full documentation. ----------------------------- Release 1.0.1714 ----------------------------- 96-05-13 johndelo New methods implemented for MsiStorage, including enumerators and RemoveElement. See TLB,Help DropTable implemented for MSI databases, Import/ExportTable implemented but not ready for testing until next build. ----------------------------- Release 1.0.1710 ----------------------------- 96-05-09 tracyf After copying a file in the InstallFiles action, the "State" column of the Files table is now updated to reflect the file's installation status. If Darwin installed a new file, the state is set to "ifsInstalled". If an older file was overwritten, the state becomes ifsOverwriteInstalled. However, note that these states won't actually be detectable or useful until writing out of the persistent maintenance database is implemented. 96-05-09 tracyf Added version checking to the InstallFiles action - if an existing file is the same or higher version, it will not be overwritten. 96-05-09 tracyf If the CommonFilesDir or ProgramFileDir directory location cannot be read from the registry, Darwin now sets a default location for these directories. For now, a subdirectory of the Windows directory is used, with subdirectory names of "Common Files" and "Program Files". (This may change if/when a more "proper" default location is decided upon). 96-05-09 tracyf Fixed a bug in the FDI Server: previously, an FDI error would occur when trying to copy files from more than one cabinet, IF the file split from one cabinet to the next was not copied, OR if there is no file split across cabinets. This was because there was no Darwin mechanism to switch cabinets other than the processing of the "need next cabinet" message send by FDI, which occurs only when a file split across cabinets is being copied. 96-05-08 ivanw Pushlike radiobuttons, and checkboxes added with text or bitmaps. Pushbuttons with bitmaps (picturebuttons) are added. Bitmaps are stretched even on Win95 (where the system would not do it on its own). Icons on buttons are still not functional. testdb.mdb demonstrates all the completed styles (if the UITEST property is set). ----------------------------- Release 1.0.1707 ----------------------------- 96-05-06 johndelo Automation for Storage, Stream, SummaryInput, SummaryOutput is now complete, along with help. Dates must either be valid DOS dates (greater than 1/1/80) or else time (fraction day: 0.0 <= date < Input database can now be opened read-only when using CreateOutputDatabase (bug 158). Automation string handling will now accept MsiString objects where the C++ interface so specifies. 96-05-03 ivanw Radiobuttons with bitmaps are added. Also pushbutton shaped radiobuttons are available. To show these new options the testdb has been expanded with several dialogs. To see all these dialogs you have to set the property UITEST on the command line. If the property is not set, only two dialogs show up in the wizard sequence. ----------------------------- Release 1.0.1703 ----------------------------- 96-05-02 johndelo Add automation for MsiStorage and MsiStream, MsiServices.CreateMsiStorage - see help Fixed a number of small database storage-related bugs. Installs now work from .MSI databases. No Import or Export yet--need to use CreateOutputDatabase followed by Commit The loader now opens the input database read-only. 96-04-30 tracyf Fixed bugs 81, 120, 121, 128, 144, 145 (help document bugs). ----------------------------- Release 1.0.1630 ----------------------------- 96-04-29 johndelo Database functions Commit and Rollback are operational, can be called only once on a database, and no updates afterwards. See help. Persistent Msi Database is now implemented, extension .MSI. More help in next release. Binary objects from both ODBC and MSI are processed using MsiStream objects. Automation and help for MsiStream will not be available until the next release. However stream objects can be converted to string objects (GetMsiString). The persistent Msi storage should work on Mac if OLE is installed, but has not been tried. 96-04-29 davidmck Not a new item, but a discovered item. For function names in memory information to work on NT 3.51 you need dbi.dll on your path. For Win95 you need mspdb40.dll on your path. ----------------------------- Release 1.0.1625 ----------------------------- 96-04-24 chetanp fixed bug 133 in autosrv.cpp ----------------------------- Release 1.0.1623 ----------------------------- 96-04-22 johndelo There are a number of database additions connected with persistent storage. They are described in the help file, and will be mentioned here when they are operational. The MsiTable column definitions are contained in the system catalog as a 16-bit integer consisting of a number of bit attributes along with the SQL byte width. See help for CreateColumn. The CreateColumn and GetColumnType functions now take and return this integer. The enumerations, icdXXX (Installer Column Definition), are in the typelib, replacing itdXXX and itcXXX The GetColumnKind has be removes, subsumed by GetColumnType. The MsiCursor method SetFilter has been made into a read/write property: Filter. More enumerated states can be returned from FindTable, itsEnum. See help or typelib The MsiDatabase property UpdateState reports the persistent state of the database. 96-04-19 johndelo Database low-level column type idtInteger has been replaced with idtLong (32-bit) and idtShort (16-bit). For a SHORT time, idtIntegers is still defined to idtLong until the non-services code is updated. idtLong should be used for temp. columns, itdShort should be used, where possible, for persistent columns. ----------------------------- Release 1.0.1616 ----------------------------- 96-04-15 johndelo A new argument has been added to CreateDatabase, readOnly, a boolean which indicates if the database should be opened read-only (True) or read-write (False). This will eventually be the default mode during an install, as a separate output database is created. Rollback method has been added to MsiDatabase, which will backout any changes made to the database. This is to be called before exit when a fatal error occurs. See help. 96-04-11 davidmck Added support for logging all memory allocations. Set the environment variable DEBUGMEM on windows or add the short resource named DEBUGMEM to the launcher on the Mac. DEBUGMEM is a set of bit flags. 0x2 tells it to log allocations. ----------------------------- Release 1.0.1609 ----------------------------- 96-04-08 ivanw The error handling has changed in the handler. Lower level functions return an error record, instead of posting the error themselves and returning a Bool. In the new scheme only methods in the handler class post error messages. Some functions, like WinMessage and Accelerate return some information in the error record, that is not a true error. In the normal use of these functions, these messages used as return codes. If the functions are called directly from automation, these error records should translate into meaningful messages about what the function accomplished. 96-04-06 davidmck Added MsiAuto.ShowAsserts method which can turn on and off asserts in the services and engine modules currently. I'll add the Handler later. ----------------------------- Release 1.0.1602 ----------------------------- 96-03-29 tracyf Mac UI improvements: Group Box control now implemented, and RadioButton groups now have a group frame; Bitmap controls are now implemented; fixed tabbing problems; implemented transparent text for static text controls; fixed problems with dialog window heights, and positioning of PushButtons. ----------------------------- Release 1.0.1528 ----------------------------- 96-03-27 tracyf A Mac MessageBox function has been implemented, which takes the exact same parameters as the Win version. The first immediate benefit of this is that asserts (which use MessageBox) are now fully functional for Mac. 96-03-27 tracyf Mac UI controls for the new Handler DLL are now available! The following controls are functional: - Static text - Edit text - Pushbuttons - Radio buttons (minus the frame border, which will come later) - check boxes The UI database tables for Mac and Win are identical, so the same tables can be used for both without modification. 96-03-26 johndelo CONVENTION: All directory paths end with a directory separator, both the result of function calls and properties set by SetPlatformProperties. At directory resolution time, any directory properties will be fixed up as needed. 96-03-25 ivanw the new UI becomes the default. If you need the old one for some reason you can reach it by using HANDLER=msictl(D).dll 96-03-25 johndelo A log option is now available to dump all of the property values at the end of the log. Include the letter 'p' in the value for LOGMODE property. See help for LOGMODE. The Condition table is now processed by the CostILnitialize action. The Selection table is now resolved for Install Level only by the CostFinalize action. In the testdb database, setting the NOJAN, NOFEB, NOMAR, NOAPR properties will turn off the corresponding file from being copied. ----------------------------- Release 1.0.1521 ----------------------------- 96-03-20 chetanp CMsiView class handles queries on local tables CMsiODBCView class handles mixed queries (ODBC + local) tables. ----------------------------- Release 1.0.1519 ----------------------------- 96-03-17 johndelo Msi.Table.NextNode method has been removed. An argument has been added to MsiTable.CreateCursor: Boolean, True to create a tree-walking cursor, False to create a normal sequential row cursor. See Help file. A catalog table with column definitions has been implemented. An argument has been added to GetCatalogTable: 0 = tables, 1 = columns. See Help. ----------------------------- Release 1.0.1514 ----------------------------- 96-03-12 davidmck Overloaded new and delete in the Engine DLL. 96-03-12 davidmck Added support for finding the function names from an address and offset. Currently this is a windows only feature. ----------------------------- Release 1.0.1512 ----------------------------- 96-03-11 johndelo Add MsiDatabase.CreateTempTableName, which creates a unique name for temporary table. MsiData object has two properties: StringValue and IntegerValue, the first previously had conflicting definitions of Value and TextValue ----------------------------- Release 1.0.1507 ----------------------------- 96-03-06 johndelo All automation objects now have a set of common methods that allow querying of the underying COM intefaces, see Help. This is particularly helpful when retrieving objects from databases and records. New automation objects can be obtained which represent the derived object types. The properties, HasInterface(iid) and RefCount, and the method, GetInterface(iid), are not in the type library as I can't figure out how to do inheritance of a dispinterface. 96-03-06 johndelo Registration for LEGO builds has been fixed. Both LEGO and DEBUG builds register under a 2nd ProgId and ClassId. In addition to Msi.Automation, they also register under Msi.AutoDebug or Msi.AutoLego. By registering the ship version last (all register as Msi.Automation), all three builds can be run simultaneously. The default DLL names used now support LEGO. The non-UI tables have been updated to match the spec in the help file. Some of the UI tables have been changed to the new format; the Control and Dialog tables have been renamed, as the new tables will be quite different. 96-03-05 johndelo MsiRecord automation of Value has been changed to conform with MsiCursor and to support the various data types. See Help. Separate properties for StringData, IntegerData, and ObjectData. MsiCopy and IMsiCopy have been changed to MsiFileCopy and IMsiFileCopy. MsiData objects are now supported and documented. ----------------------------- Release 1.0.1429 ----------------------------- 96-02-28 tracyf - Fixed bugs 84 & 91 (involving working around a Windows 95 bug in GetDiskFreeSpace). - Fixed up several memory leaks in the path, auto, and services objects. - Implemented CMsiPath::CheckLanguageIDs (Mac) ----------------------------- Release 1.0.1427 ----------------------------- 96-02-26 johndelo There is a new MsiDirectoryManager implmentation -- see help file. The old Destination table is replaced by a simpler Directory table. Logging has been fixed. Minor bugs in database fixed. 96-02-26 davidmck Asserts now have three buttons - Abort - Break to debugger Retry - Continue Ignore - Turn off all further asserts in this module. 96-02-26 davidmck Checked in more memory debugging features. We now bring up assert dialogs with information about memory leaks. This information is also written to the log file if logging is turned on. Currently only the String object is hooked up to AllocObject which provides us with greater debugging information. I'll be turning on more objects as time progresses. 96-02-22 tracyf More MsiPath interface functions have been implemented: - GetFileAttribute (Mac) - SetFileAttribute (Mac) - FileWritable (Mac) The help file has been updated for all of these. In addition, full Mac path and filename validation has been implemented (as soon as possible, I'm going to update the doc for CreatePath to reflect Win and Mac path/file syntax restrictions). Tests for all these functions have been added to MsiPath.bas. ----------------------------- Release 1.0.1422 ----------------------------- 96-02-21 johndelo The makefile and make.bat now can make LEGO builds. May not yet be in release procedure. Property names have been justified with the Help file. Not many are implemented yet. Several database bugs fixed and closed. New objects associated with engine: MsiSelectionManager and MsiDirectoryManager. Note the in the testdb.mdb, normal UI may be disabled with QUIET=1. ----------------------------- Release 1.0.1420 ----------------------------- 96-02-19 tracyf Implemented (or fixed a broken implementation of) the following MsiPath functions: - Writable (Win & Mac) - Exists (Mac) - Remove (Win and Mac) - FileExists (Win and Mac) - FileSize (Mac) - RemoveFile (Mac) The documentation (help file) has been updated for all these functions. Test script: MsiPath.bas 96-02-19 johndelo More operators have been added to EvaluateCondition. See Help. Evaluate.BAS has been updated. The expEnum has been changed to iecEnum, consistent with other exported enums. 96-02-15 ivanw Changed the return type of MsiRecord::Set* from HRESULT to Bool. ----------------------------- Release 1.0.1415 ----------------------------- 96-02-14 johndelo Implemented EvaluateCondition in services. See Help file for details. First test script: Evaluate.BAS in Darwin\test. Still more test cases to check. 96-02-14 ivanw Added the option of building the (still untested) new UI. The default is still the old one. Replaced the control.h file by handler.h (the new UI definitions). Modified the engine so it compiles with the new header file. Added the automation for the new UI. 96-02-14 tracyf Implemented Mac version of GetFileVersionString: Documentation: Help file Automation script: VerStrM.bas (Mac), VerStrW.bas (Win) ----------------------------- Release 1.0.1413 ----------------------------- 96-02-13 tracyf Implemented the Mac version of CheckFileVersion: Documentation: the updated help file Automation file: \darwin\test\FileVerM.bas ----------------------------- Release 1.0.1413 ----------------------------- 96-02-12 johndelo Command line help has been changed to show property names with descriptions. Old ACME command option letters are maintained for backward compatibility. See Help topic on Command Line Options. Launcher properties and help descriptions can both be set with the LOADPROP.EXE tool. See Help topic for info. Logging has been implemented in the engine. See Help topics: LOGFILE and LOGMODE properties. The engine sequencer, Sequence, is now only to be called by the top leve actions, see Help topic. The DoAction command is what is used by the loader or automation. The 'Install' action is the normal top level action. The Action table has been modified slightly, see Action table Help, especially about termination action sequence Properties have been added and many have been documented. The list of which ones are NOT implemeted yet is forthcoming. Some small bugs in the MsiTable implementation have been fixed, which would occasionally cause Asserts and missed records. 96-02-10 davidmck Hooked up CMsiMalloc to CMsiServices. You will now get asserts when leaving unfreed memory blocks ----------------------------- Release 1.0.1408 ----------------------------- 96-02-07 johndelo The low-level database engine, MsiTable and MsiCursor is now operational and the documentation has been completed. The tree functionality and persistent storage is not implemented (for Milestone 2). A very preliminary test script DBTABLE.BAS is checked into Darwin\Test. The function CreateRows has been eliminate, and its arguments integrated into the LoadTable and CreateTable calls. The names Get/PutObject and Get/PutData have been changed to avoid conflicts with macros defined by the Win API headers. The VBA wrappers did not need to change. 96-02-06 tracyf Three new interface functions have been implemented: - MsiPath::CheckLanguageIDs - MsiPath::GetLangIDStringFromFile - MsiServices::GetLangNamesFromLangIDString Documentation: the updated help file Automation file: \darwin\test\language.bas ----------------------------- Release 1.0.1406 ----------------------------- 96-02-05 johndelo Reorganized help .RTF files a bit, adding ACTIONS.RTF, and OBJECTS.RTF (objects other than Services, Database, and Path). Many help topics are added, including Dev topics such as how to automate and provide help to C++ methods and Help file syntax. Most methods are doc'd, but many in Services are incomplete. The database class now makes the system catalog accessible as an MsiTable object, with the method GetCatalogTable. Most MsiTable and MsiCursor is functional and ready for test development (but not quite ready for bugging). Note the the OpenViewSQL method is now gone (OpenView now takes the SQL string). 96-02-01 johndelo The table "ViewQuery" has been removed from the database. The SQL queries are now the responsibilities of the actions and controls and have been moved into the beginning of the appropriate source files. The old database method OpenViewSQL will be renamed OpenView and the previous functionality of opening a view by name is now gone. The VBA automation method OpenView already requires a SQL string. The ODBC libraries are now dynamically loaded on demand. Thus ODBC support is no longer required to use or test the Msi database functionality. The ugly error code offsets have been removed. All Darwin error codes are in the range 1000 to 1999. 2000-2999 are reserved for debug messages. ----------------------------- Release 1.0.1401 ----------------------------- 96-01-31 johndelo The database type for the MsiServices funciton CreateDatabase has been changed from a string to an enum, idbEnum. The enum values are in the type library. Check msiauto.hlp for documentation. The low-level database code, classes IMsiTable and IMsiCursor is in place but not fully operational as yet. Check the help for documentation. ----------------------------- Release 1.0.1330 ----------------------------- 96-01-29 tracyf Two new MsiPath functions have been implemented: CheckFileVersion, and GetFileVersionString. See the updated help file for documentation. ----------------------------- Release 1.0.1325 ----------------------------- 96-01-23 tracyf Fixed bug 64 (several problems related to calling services.CreatePath, path.CreateCopier, and copier.CopyTo via automation). ----------------------------- Release 1.0.1318 ----------------------------- 96-01-17 johndelo Help file now has a version that shows under the Help Menu/Version. Ivan added the UI database table definitions. A first pass at the list of properties was added, but few topics as of yet. You will need to have MSIAUTO.CNT in the same directory as MSIAUTO.HLP the first time you run help in order to get the book-tree view. 96-01-16 johndelo IMsiControl and MsiControl have been renamed to IMsiHandler and MsiHandler. This was necessary to use the old name as the base for UI controls. Note that the automation method is now The name of the UI DLL won't change until the new implementation is build. Help strings for VBA browsing have been added for some classes. Note that the type library GUID and name have changed: now "Installer". Enum values have been added to the type library, under "Constant". These can be directly pasted into and used within the VB code. Only a few have been added so far... more to come. The argument names for VBA have been changed to start with lower case, consistent with Excel. The use of them is still case insensitive. A help file is now build for Darwin, MSIAUTO.HLP. This file currently describes the methods as exposed to VBA. A C++ version will be conditionally built later. Only the auto and the database classes are doc'd yet, more coming soon. The database table descriptions, except UI, are mostly there. This help file can be run from the VBA browser "?" button, or WINHLP32. 96-01-16 tracyf Fixed bugs: 45,47,52,57 more fixes dealing with Path object functionality. ----------------------------- Release 1.0.1309 ----------------------------- 96-01-08 tracyf Fixed bugs: 42, 43, 49, 53, 54, 55, 56, 60 All dealing with Path object functionality. 96-01-05 chetanp Added ProcessIniFile support for add/add if absent/ delete/ appendtag/ deletetag to Services. Transfered UpdateResource from Services to Path object 96-01-04 johndelo Missing automation wrappers and ODL have been implemented, as response to a series of bugs. The IMsiRecord object is no longer limited to 32 fields, but by the amount of contiguous memory that can be obtained. Howerver, using more than 32 fields in a record is not anticipated in Darwin. Provision is also made to pass objects in records, but the objects that can be passed are not yet available for testing. ----------------------------- Release 1.0.1228 ----------------------------- ----------------------------- Release 1.0.1207 ----------------------------- 95-12-06 ivanw DialogControl table is eliminated. Controls are not reuseable anymore. All info from DialogControl is migrated to Control. The CopyGauge flicker problem has been fixed. 95-12-05 ivanw ----------------------------- Release 1.0.1205 ----------------------------- 95-11-30 tracyf I've checked a bunch of new code into the Controll DLL source, which brings the Mac Darwin user interface up to an approximate par with the Win Darwin UI. This will allow us to author fully interactive Mac setups, and should hold us during the time that Ivan's UI redesign is taking place. What works: - modal and modeless dialog windows - pushbuttons - sequence buttons - radio buttons, radio button groups - checkboxes - static text fields - edit text fields - action text fields - action data fields - copy gauge - most control properties What doesn't work - List, combo boxes (don't even try it!) - bitmaps (bitmap controls can be authored, but an empty frame is displayed) - tree control (it'll be a while before we have this for either Mac or Win) - some control properties don't get set or read I've also checked a new set of Arcade sample install tables, with a demo UI authored in. ----------------------------- Release 1.0.1116 ----------------------------- 95-11-14 davidmck We should now copy the regauto.exe and msi.tlb to the release server for releases.