windows-nt/Source/XPSP1/NT/admin/darwin/doc/relnot97.txt
2020-09-26 16:20:57 +08:00

5746 lines
293 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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

-----------------------------
Release 0.10.00.2524
-----------------------------
97-01-23 chetanp Added BindImage stuff to automation.
BindImage passed preliminary testing as regards a
simple file with links
only into user32.dll. Bind worked fine on both Win 95
and Win NT. The
bound file worked well in both cases on both
platforms.
97-01-23 alanr MsiGen: Added Feature and FeatureLevel properties.
97-01-23 bench MsiPatch: Patch creation has changed dramatically.
See the help file for more info. Also, the help file
should be completely up to date. If it's in the
help file, it should work. There is not yet patch
application support for these patches.
97-01-22 chetanp added BindImage table.
97-01-22 chetanp Added BindImage function to services.
Fixed conflicts with imagehlp files
97-01-21 malcolmh The behavior of the /regserver and /regservice flags
for msiexec(d) have changed.
1) /regservice is no longer a valid option
2) /regserver now does what /regservice used to do,
i.e. attempt registration as a service but fall back
to a server if that fails
3) /regnoservice registers the install server as a
server regardless of whether registration as a service
is possible
This change makes our launcher consistent in that
it can DllRegisterServer all DLLs and /regserver all
EXEs without specific knowledge of the particular DLL
or EXE.
-----------------------------
Release 0.10.00.2521
-----------------------------
97-01-20 chetanp Added registry support for REG_EXPAND_SZ
Added support for creation and deletion of registry
keys.
Added ixoRegCreateKey, ixoRegDeleteKey opcodes in
executor
97-01-20 alanr MsiGen: Replaced ROOTDRIVE references with TARGETDIR.
97-01-17 malcolmh Added messages to the actions that occur while the
PreAction dialog is displayed. Remember that all
actions that don't call ExecuteRecord must send either
ActionData or Progress messages to the UI to keep it
awake.
-----------------------------
Release 0.10.00.2517
-----------------------------
97-01-16 chetanp added Proxy table help.
97-01-16 alanr Added Cursor.DateData automation read/write support
for long integer value columns (previously only
supported string values).
97-01-16 mattwe MsiUtil: Fixed typo in ODL
MsiUtil.BuildCompletProject ->
MsiUtil.BuildCompleteProject
Darwin Bug #734
97-01-16 davidmck Added code in engine to allow for reference
tracking. Involved moving function name code into module.h so
all could share.
97-01-15 ivanw Added the ability to change fonts, style, font size
and font color in text controls. To see this in
action run testdb with UITEST=1. For information how to
use it, see the help pages for the TextStyle table and
the Text control type.
-----------------------------
Release 0.10.00.2513
-----------------------------
97-01-09 johndelo MsiDatabase.Export will now export summary
information stream to an .idt file as if it were a table.
Import has always accepted this table which contains
pairs of integer PID with string|integer|datetime
data.
MsiTable.EXE has also been updated to show the table
in the list box and to copy it with the '*' wildcard.
-----------------------------
Release 0.10.00.2509
-----------------------------
97-01-08 ivanw When a control is activated it can set a property to
the present value of an other property (with
arbitrary number of indirections). Untill now controls could
set a property only to a constant value. If anybody
needs more complex cases (like setting a property to
some expression) let me know.
97-01-08 ivanw Added an admin install wizard sequence to testdb and
the template database.
-----------------------------
Release 0.10.00.2508
-----------------------------
97-01-07 alanr Added new Cursor.DateData automation routine for reading
date fields from tables.
97-01-07 bench Changed AdminInstallFinalize action to only copy the
necessary Msi files (not Msi*.*). The copied files
are the same that would be installed with "install
ACTION=@". The ship launcher will copy the ship
components and the debug launcher will copy the debug
components. Currently no error occurs when a file is
missing.
97-01-07 bench Added the AdminInstallFinalize action, which copies the
launcher, database and Msi* components to the location
defined by TARGETDIR.
Launcher: always copied directly to TARGETDIR
Database: if the DATABASE property is not defined in the
launcher, an error will occur. Use loadprop.exe
to add this property to the launcher.
If DATABASE is defined and is a full path,
the database is not copied to the admin point.
If DATABASE is defined and is a relative path,
the database is copied to the relative path below
TARGETDIR. Note, setting DATABASE on the command
line to the launcher has no effect on this logic,
as that only sets the property in the database and
not in the launcher's resource.
Msi* components: If the INSTALLER property is defined in
the launcher and is a full path, no components are
copied. If the INSTALLER property is not defined, the
components are assumed to be located in the same
directory as the launcher. If the INSTALLER property is
defined and is a relative path, the components are
assumed to be in that directory beneath the launcher
and are copied to that directory beneath the admin point.
Currently, all MSI* files are copied from the appropriate
directory.
I have also added this action and ExecuteFinalize to the
AdminSequence table of the testdb.
-----------------------------
Release 0.10.00.2507
-----------------------------
97-01-06 chetanp Changed Shortcut and ProgMan tables and related
actions to allow for shortcuts/progman items to files AND
folders not installed by the current product. See
help on the tables and MsiEngine::FormatText function
for more help.
97-01-06 chetanp enhanced FormatText functionality to allow for File
table and Component table keys. See
MsiEngine::FormatText help for more info.
97-01-06 tracyf InstallFiles action now performs a separate query
for Admin mode, thus copying all files in this mode.
97-01-06 bench The DirectoryManager has been updated in the
following ways. When in Admin mode, SetTargetPaths only uses
property values for the roots and not for non-root
directories. Also, SetTargetPaths does not set
properties when in Admin mode. When not in Admin mode, the
value of the ROOTDRIVE property is used to resolve
any undefined roots. In Admin mode an error still
occurs if a root is undefined.
97-01-06 bench The Directory table in the testdb has been updated to reflect the
change in philosophy regarding the root directory
names. In short this philosophy is to not use ROOTDRIVE
as a directory name and to use TARGETDIR as a
directory name.
-----------------------------
Release 0.10.00.2503
-----------------------------
97-01-02 chetanp Added support to FormatText (that expands property
strings) to handle
1. #File where File stands for a key in the File
table. The property is expanded to a full file path.
2. $Component where Component stands for a key in the
Component table. The property is expanded to a
Directory of the Component (taking into consideration
whether the Component is selected to be installed to run
from source or local).
97-01-02 chetanp Added Feature support to the Configuration Manager
97-01-02 chetanp Added registry compatibility to the configuration
manager
97-01-02 chetanp Added functionality to Darwin to manage Features
from Properties
97-01-02 chetanp Added functionality to msiexec so as to be able to
configure features/ uninstall product from command
line. Type msiexec /? for more.