InstallValidate onward. To do this make sure we do not do the
costing initialization work again if it is already done (by checking
the CostingComplete Property).
- A lot of work to refine feature states, setting the state affects
the state of all child features and also respect features that want
to default to something other than LOCAL.
apis to work. Also implement MsiGetQualifiedComponent, or at least some
of the functionality as it is supposed to install stuff if it is
absent, which it does not do yet.
Store the keypath, and do refcounting and registration of SharedDLLs.
Fix a bug with handing dword values in the registry.
Fix bugs with writing registry keys where value == NULL.
Make use of msidefs.h.
Lay some groundwork for uninstalls.
CustomActions into custom.c. Cleaned up a lot of the handling of
custom actions including scripting actions and processing return
codes.
- Mike McCormack pointed out that MsiFormatRecord is basically the
same as internal function deformat_string. So broke deformat_string
out and updated it to function as MsiFormatRecord and implemented
MsiFormatRecord.
- A number of random fixes to action.c including properly calculating
the length for the LocalPackage name, not forcing a reboot when
really we should just return ERROR_INSTALL_SUSPEND and handling
REG_MULTI_SZ now that we can deformat the properly.
registry.c file. Also clean up all the various registry keys we need
to open and create to this module and modify the functions for msi.c
to call these functions.
- Allow for the queing of custom actions to trigger on the
InstallExecute or InstallExecuteAgain actions.
- allow for the queing of custom actions to trigger on
InstallFinalize.
- Properly set the CustomActionData property for said queued actions.
- Implement RegisterProduct.
- Beginning implementation of ForceReboot.
- Don't kill install if an item to be duplicated does not exist.
- Write out SourceList and LastUsedSource for resuming installs.
- Use regsvr32 to register self reg dlls.