reactos/sdk/include/psdk/msi.h

1553 lines
42 KiB
C
Raw Normal View History

/*
* Copyright (C) 2002,2003 Mike McCormack
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_MSI_H
#define __WINE_MSI_H
Sync to Wine-20050628: Mike McCormack <mike@codeweavers.com> - Repaint the area behind the "transparent" text control when it changes. - Implement transparency in the text control. - Make the MSI icon control work. - Make tabs work in msi dialogs. - Added support for the MSI MaskEdit control. - Use a richedit control for license text. - Fix radio button groups. Don't add the WS_GROUP style to every window. - Use standard lists in the event subscription code. - Take the dialog frame into account when calculating the dialog size. - Use MSI_QueryGetRecord in one more place. - Create a helper function to fetch a single record from a query. - More -Wmissing-declarations and -Wwrite-strings warning fixes. - Get rid of some redundant parser types. - Use the new helper function MSI_QueryGetRecord. - Use MSI_RecordGetString in more actions. - Use MSI_RecordGetString where possible. - Fixes for -Wmissing-declarations and -Wwrite-strings warnings. - Remove some unused code. - Add and correct some function declarations. - Improve number parsing and avoid unicode.h. - avoid unicode.h - add a missing function prototype - Create a stub implementation for MsiViewGetError. - Remove more types from the parser. - Test and fix the size of stream fields in a record. - Clean up headers and make some functions static. Marcus Meissner <meissner@suse.de> - Use a simpler expression for the "RichEdit20W" string to workaround compiler bug. - Remove cszbs from msi/action.h. Aric Stewart <aric@codeweavers.com> Mike McCormack <mike@codeweavers.com> - Allow dialog controls to subscribe to installer events. - Fix handling of checkbox properties. - Implement dialog events and hook up the dialog code. Aric Stewart <aric@codeweavers.com> - Break out all the file related actions and helper functions into files.c - Break out all the top level apis into install.c. - Break out all the class registration actions into classes.c. This includes RegisterClassInfo, RegisterProgIds, RegisterExtensions and RegisterMIMETypes. - Break out all the helper functions into helpers.c. - Added module upgrade.c and implemented FindRelatedProducts. - A long overdue fix to MSI_SetTargetPath. This should fix an error with some installers that where unable to change the target path. - Add functions to add the User UpgradeCodes. - A simple cleanup to only track the temp file if we need to have it laying around because the action is going on asynchronously. Otherwise clean up the temp file as the action finishes. - Introduce really basic scripting of actions. This is primarily to get the order of execution of the action correct since some custom actions can be scripted and others are run during the script building phase. - Perform ExecuteAction at UILevel 2. - Rework CreateShortcuts to use MSI_IterateRecords. - Properly handle -1 as a registry key root. - Rework SelfRegModules to use MSI_IterateRecords. - Rework component, feature and file loading to use MSI_IterateRecords. - Rework RegisterFonts to use MSI_IterateRecords. - Rework WriteIniValues to use MSI_IterateRecords. - Rework PublishProduct to use MSI_IterateRecords. - Rework RegisterTypeLibraries to use MSI_IterateR - Rework LaunchConditions to use MSI_IterateRecord - Rework CostFinalize to use MSI_IterateRecords. - Rework WriteRegistryValues to use MSI_IterateRecords. - Rework CreateFolders to use MSI_IterateRecords. - Use MSI_IterateRecords for processing actions. Some whitespace cleanup and replace a comment block I did not want to remove. - Flesh out the remaining keys in RegisterProduct. - Extending upon Mike McCormack's cleanup to use MSI_RecordGetString. - Register the Product Version also. Also help plug some memory leaks pointed out by Mike McCormack. - Avoid a loop where a parent's parent refers to itself as its parent. - Added module upgrade.c and implemented FindRelatedProducts. - Set the Preselected property if appropriate (relevant to MigrateFeatureStates when implemented). - Write out Product Language and Product Icon to the registry. - Write out UpgradeCodes to the registry to allow for future upgrades. - Don't get caught in loops on parent progids. - Since multiple progids can refer to 1 class we need to check if that class is isntalled instead of just relying on having it set the InstallMe variable. - Add install_on_demand for Extension servers also. currently defaulting to TRUE. - Extension need to have 1 verb to mark the given progid to be installed. - Do not loop if a ProgId's Parent Index it itself. - Add a VersionIndIndex for tracking version independent fields for the ProgIds properly. - Print a message for skipped actions in ProcessExecSequence like in the UISequence. - Do not change a features state to Advertise if it explicitly disallows it. - For typelibs index 1 do not add \\1 to the path. This cleans up registry diffs with native MSI. - Register the FileType and correct short vs long path problems with InprocServer32. Also add install_on_demand boolean for future expansion. - First pass at writing out CurVer keys for ProgIds. Also print a message for the actions we skip. Lines up with native MSI output logs for ease of comparison. - A big rewrite of the whole RegisterClass, RegisterProgId, RegisterExtension and RegisterMIME actions. We now handle verbs properly, handle dependancies and such properly and keep track of what we need to register and what we do not properly. - Allow control events to return codes to halt the processing of event. Needed for the SetTargetPath Event. - Fix situations where TARGETDIR is set to a non \ terminated path. Fixes a few installers. - Redo how we extract files from a cabinet in order to dramatically improve performance, especially if picking and choosing files out of the cabinet. - Duplicate files should not fail if unable to get Destination Directory. - Use MSI_IterateRecords for DuplicateFiles. - Add UI messages to FindRelatedProducts. - Reduce unneeded includes. - A "1" is returned not a 1 for AssignmentType. Also as a bit more to the FIXME message. - Add Language to the values we can query with MsiGetProductInfo. - Correct a crash if the length buffer is NULL. - Locate where a buffer size is not being set and correctly handle the buffer size conversion from W to A (with help from Robert Shearman). - Make sure the TRACE statements do not spew garbage by using debugstr_wn. - Restrict deformating of nested index keys [[1]]. - Introduce the beginning of group deformating {}. - Implement the [!file] format to produce the short filename. Stefan Huehner <stefan@huehner.org> - Fix more -Wstrict-prototypes warnings. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Dmitry Timoshkov <dmitry@codeweavers.com> - Make more of the OLE interface vtables const. svn path=/trunk/; revision=17034
2005-08-03 22:12:15 +00:00
#ifndef _MSI_NO_CRYPTO
Sync to Wine-20050830: Francois Gouget <fgouget@free.fr> - Change some Dll* functions so they are exported by name like on Windows. Update the documentation accordingly. Johan Dahlin <jdahlin@async.com.br> - Implemented MsiSetComponentState*. - Added stubs for MsiSetComponentStateA and MsiSetComponentStateW. - Added a null check for component. Alexandre Julliard <julliard@winehq.org> - Don't prefix the functions DllCanUnloadNow, DllGetClassObject and Dll(Un)RegisterServer with the dll name so that the compiler can check the prototypes. Vincent Beron <vberon@mecano.gme.usherb.ca> - Correct mismatches between spec files and comments about export number. Aric Stewart <aric@codeweavers.com> - Display the correct text string in the action text field for the dialog boxes. Also the string should be deformatted. - Make index INT not UINT because it can be -1. - Fixed a memory overflow and leak identified by Mike McCormack. - Add some body to ResolveSource because it is possible to need it when an install is begun but the media is not in the drive, such as in install-on-demand cases. - The file name used in the ui messages is the target name not the source name. Yuri Kozlov <kozlov.y@gmail.com> - Remove duplicate declaration of MSI_SetPropertyW. Mike McCormack <mike@codeweavers.com> - Handle loading strings over 64k from the string table. - build a standard Wine list of folders instead of using an array - use folder pointers instead of array indexes - build a standard Wine list of files instead of using an array - use file pointers instead of array indexes - build a standard Wine list of features instead of using an array - use feature pointers instead of array indexes - build a standard Wine list of components instead of using an array - use component pointers instead of array indexes - Store the component information in a standard Wine list. - Add include guard to header and make functions extern. - build a standard Wine list of extensions instead of using an array - use extension pointers instead of array indexes - build a standard Wine list of appids instead of using an array - use appid pointers instead of array indexes - build a standard Wine list of mime types instead of using an array - use mime type pointers instead of array indexes - Add the allocated mime type to the mime type list. - build a standard Wine list of classes instead of using an array - use class pointers instead of array indexes - Fix a small bug introduced when converting appids to a list. - Implement MsiModifyView (MSIMODIFY_INSERT_TEMPORARY). - Better stub for MsiViewGetError. - Don't dereference variables in a trace. - the combination of all table keys must be unique, not each key - MsiViewExecute may not be called before MsiModifyView - Make sure to save the result calculated in ACTION_UpdateInstallStates. Steven Edwards <steven_ed4153@yahoo.com> - Add real stub for MsiConfigureFeatureW. svn path=/trunk/; revision=17672
2005-09-05 21:34:19 +00:00
#include <wincrypt.h>
Sync to Wine-20050628: Mike McCormack <mike@codeweavers.com> - Repaint the area behind the "transparent" text control when it changes. - Implement transparency in the text control. - Make the MSI icon control work. - Make tabs work in msi dialogs. - Added support for the MSI MaskEdit control. - Use a richedit control for license text. - Fix radio button groups. Don't add the WS_GROUP style to every window. - Use standard lists in the event subscription code. - Take the dialog frame into account when calculating the dialog size. - Use MSI_QueryGetRecord in one more place. - Create a helper function to fetch a single record from a query. - More -Wmissing-declarations and -Wwrite-strings warning fixes. - Get rid of some redundant parser types. - Use the new helper function MSI_QueryGetRecord. - Use MSI_RecordGetString in more actions. - Use MSI_RecordGetString where possible. - Fixes for -Wmissing-declarations and -Wwrite-strings warnings. - Remove some unused code. - Add and correct some function declarations. - Improve number parsing and avoid unicode.h. - avoid unicode.h - add a missing function prototype - Create a stub implementation for MsiViewGetError. - Remove more types from the parser. - Test and fix the size of stream fields in a record. - Clean up headers and make some functions static. Marcus Meissner <meissner@suse.de> - Use a simpler expression for the "RichEdit20W" string to workaround compiler bug. - Remove cszbs from msi/action.h. Aric Stewart <aric@codeweavers.com> Mike McCormack <mike@codeweavers.com> - Allow dialog controls to subscribe to installer events. - Fix handling of checkbox properties. - Implement dialog events and hook up the dialog code. Aric Stewart <aric@codeweavers.com> - Break out all the file related actions and helper functions into files.c - Break out all the top level apis into install.c. - Break out all the class registration actions into classes.c. This includes RegisterClassInfo, RegisterProgIds, RegisterExtensions and RegisterMIMETypes. - Break out all the helper functions into helpers.c. - Added module upgrade.c and implemented FindRelatedProducts. - A long overdue fix to MSI_SetTargetPath. This should fix an error with some installers that where unable to change the target path. - Add functions to add the User UpgradeCodes. - A simple cleanup to only track the temp file if we need to have it laying around because the action is going on asynchronously. Otherwise clean up the temp file as the action finishes. - Introduce really basic scripting of actions. This is primarily to get the order of execution of the action correct since some custom actions can be scripted and others are run during the script building phase. - Perform ExecuteAction at UILevel 2. - Rework CreateShortcuts to use MSI_IterateRecords. - Properly handle -1 as a registry key root. - Rework SelfRegModules to use MSI_IterateRecords. - Rework component, feature and file loading to use MSI_IterateRecords. - Rework RegisterFonts to use MSI_IterateRecords. - Rework WriteIniValues to use MSI_IterateRecords. - Rework PublishProduct to use MSI_IterateRecords. - Rework RegisterTypeLibraries to use MSI_IterateR - Rework LaunchConditions to use MSI_IterateRecord - Rework CostFinalize to use MSI_IterateRecords. - Rework WriteRegistryValues to use MSI_IterateRecords. - Rework CreateFolders to use MSI_IterateRecords. - Use MSI_IterateRecords for processing actions. Some whitespace cleanup and replace a comment block I did not want to remove. - Flesh out the remaining keys in RegisterProduct. - Extending upon Mike McCormack's cleanup to use MSI_RecordGetString. - Register the Product Version also. Also help plug some memory leaks pointed out by Mike McCormack. - Avoid a loop where a parent's parent refers to itself as its parent. - Added module upgrade.c and implemented FindRelatedProducts. - Set the Preselected property if appropriate (relevant to MigrateFeatureStates when implemented). - Write out Product Language and Product Icon to the registry. - Write out UpgradeCodes to the registry to allow for future upgrades. - Don't get caught in loops on parent progids. - Since multiple progids can refer to 1 class we need to check if that class is isntalled instead of just relying on having it set the InstallMe variable. - Add install_on_demand for Extension servers also. currently defaulting to TRUE. - Extension need to have 1 verb to mark the given progid to be installed. - Do not loop if a ProgId's Parent Index it itself. - Add a VersionIndIndex for tracking version independent fields for the ProgIds properly. - Print a message for skipped actions in ProcessExecSequence like in the UISequence. - Do not change a features state to Advertise if it explicitly disallows it. - For typelibs index 1 do not add \\1 to the path. This cleans up registry diffs with native MSI. - Register the FileType and correct short vs long path problems with InprocServer32. Also add install_on_demand boolean for future expansion. - First pass at writing out CurVer keys for ProgIds. Also print a message for the actions we skip. Lines up with native MSI output logs for ease of comparison. - A big rewrite of the whole RegisterClass, RegisterProgId, RegisterExtension and RegisterMIME actions. We now handle verbs properly, handle dependancies and such properly and keep track of what we need to register and what we do not properly. - Allow control events to return codes to halt the processing of event. Needed for the SetTargetPath Event. - Fix situations where TARGETDIR is set to a non \ terminated path. Fixes a few installers. - Redo how we extract files from a cabinet in order to dramatically improve performance, especially if picking and choosing files out of the cabinet. - Duplicate files should not fail if unable to get Destination Directory. - Use MSI_IterateRecords for DuplicateFiles. - Add UI messages to FindRelatedProducts. - Reduce unneeded includes. - A "1" is returned not a 1 for AssignmentType. Also as a bit more to the FIXME message. - Add Language to the values we can query with MsiGetProductInfo. - Correct a crash if the length buffer is NULL. - Locate where a buffer size is not being set and correctly handle the buffer size conversion from W to A (with help from Robert Shearman). - Make sure the TRACE statements do not spew garbage by using debugstr_wn. - Restrict deformating of nested index keys [[1]]. - Introduce the beginning of group deformating {}. - Implement the [!file] format to produce the short filename. Stefan Huehner <stefan@huehner.org> - Fix more -Wstrict-prototypes warnings. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Dmitry Timoshkov <dmitry@codeweavers.com> - Make more of the OLE interface vtables const. svn path=/trunk/; revision=17034
2005-08-03 22:12:15 +00:00
#endif
#define MAX_GUID_CHARS 38
#ifdef __cplusplus
extern "C" {
#endif
typedef ULONG MSIHANDLE;
typedef enum tagINSTALLSTATE
{
Sync to Wine-0_9_1: Ivan Leo Puoti <ivanleo@gmail.com> - Fix some wrong prototypes. Thomas Weidenmueller <wine-patches@reactsoft.com> - Passing NULL as the last two parameters to ReadFile is illegal and actually causes a crash on windows. The attached patch fixes this. Aric Stewart <aric@codeweavers.com> - Force files to install if the REINSTALL property is set. Mike McCormack <mike@codeweavers.com> - Some installers don't call the CreateFolders action before the InstallFiles action as MSDN specifies, but it still seems to work, so make sure that we create component directories in the InstallFiles action anyway. - Create component folders in the CreateFolders action. - If an action fails, print out its name as well as the error code. Use %d for error codes so it's easy to match them up to something in winerror.h. - Rename load_dynamic_stringW to msi_dup_record_field to better describe what it does, and replace a few instances with MSI_RecordGetString to avoid allocating memory. - Tidy up the RegisterProduct action a little. - Create a stub function to apply a single table transform and call it where we need to apply transforms. - Enumerate the substorage transforms for any patches that are passed on the command line with PATCH=. Need to implement table_apply_transform() before this will do anything interesting. - Simplify register_progid() and remove a fixed length buffer. - Make enter and escape trigger the default and cancel buttons in dialogs. - Switch back to using IPicture to load images. LoadImage did the resizing for us, but doesn't handle jpeg files and requires us writing a temp file, whereas IPicture handles jpeg files and can load directly from a stream. - Remove unused package parameter of register_progid_base(). - Remove an incorrect comment and check for 0 being an invalid file handle. - Add missing semicolons that caused compile trouble on FreeBSD. - Extract file directly to their target location, bypassing the need to use temporary files and move files. - Put the UI update code for cabinet file into a separate function. - Translate INVALID_HANDLE_VALUE to zero for cabinet handles. - Fix a memory leak in the cabinet extracting code. - Fix passing of NULL pointers to MsiDecomposeDescriptor and add a test. - Fix parameter handling in MsiSetTargetPath, and add a test for it. - Deleted two buggy functions that incorrectly and inefficiently check whether a row already exists in a table, and replaced them with a call to an existing working function that does the same thing correctly. - Fix and test MsiGetProperty and MsiSetProperty. - Add a stub implementation of msi.MsiSetMode. - NULL and empty strings are the same in conditions. - Add a bunch of tests for MsiEvaluateCondition and make them pass. - Fix error handling in MsiEvaluateCondition. - Create the +msidb debug channel for msi database code. - Implement transforms. This still includes some debugging code which can be enabled by setting debug_transform to 1 in the relevant places. - Define NONAMELESSUNION and NONAMELESSSTRUCT for older compilers. - Remove some redundant null pointer checks. - Make sure to unregister all the classes that were registered when msi is unloaded, so we can register again cleanly. - Fix a memory leak. - Implement the RemoveFiles action. - Add a read-only implementation of the SelectionTree control. - Make sure we only CoUninitialize after successfully initializing. Fix the address of the returned IShellLinkDataList interface. - Use an enumeration for file states. - Handle MaskEdit masks containing dashes and other constant characters. - Stub implementation for MsiAdvertiseScriptA/W. - Add a stub for the AllocateRegistrySpace action. - Explicitly check for MSICONDITION_TRUE being returned from MsiEvaluateCondition. - Stub implementation for MsiGetFileHashA/W. - Define MSIDBOPEN_ constants using LPCWSTR when compiling Wine. - Improve MsiUseFeatureEx and MsiGetFeatureState a little, add some simple test cases. - Use msi_get_property_int() in a few more places. - Implement MsiGetFeatureUsageA and MsiUseFeature(Ex)A using their W versions. - Use "static const" rather than "const static" as gcc -W complains about the former. - Add an implementation for MsiGetShortcutTargetA/W. - Don't change the UI level during ExecuteAction. - Return an error in MsiGetComponentPathW if passed a null component. - Remove the unused 1st parameter of ACTION_VerifyComponentForAction. - Fix MsiGetPropertyA/W spec declarations. - Create an internal handle-free api for reading MSI database summary information. svn path=/trunk/; revision=19307
2005-11-17 20:49:37 +00:00
INSTALLSTATE_NOTUSED = -7,
INSTALLSTATE_BADCONFIG = -6,
INSTALLSTATE_INCOMPLETE = -5,
INSTALLSTATE_SOURCEABSENT = -4,
INSTALLSTATE_MOREDATA = -3,
INSTALLSTATE_INVALIDARG = -2,
INSTALLSTATE_UNKNOWN = -1,
INSTALLSTATE_BROKEN = 0,
INSTALLSTATE_ADVERTISED = 1,
INSTALLSTATE_ABSENT = 2,
INSTALLSTATE_LOCAL = 3,
INSTALLSTATE_SOURCE = 4,
INSTALLSTATE_DEFAULT = 5
} INSTALLSTATE;
typedef enum tagMSIPATCHSTATE
{
MSIPATCHSTATE_INVALID = 0,
MSIPATCHSTATE_APPLIED = 1,
MSIPATCHSTATE_SUPERSEDED = 2,
MSIPATCHSTATE_OBSOLETED = 4,
MSIPATCHSTATE_REGISTERED = 8,
MSIPATCHSTATE_ALL = (MSIPATCHSTATE_APPLIED | MSIPATCHSTATE_SUPERSEDED |
MSIPATCHSTATE_OBSOLETED | MSIPATCHSTATE_REGISTERED)
} MSIPATCHSTATE;
typedef enum tagINSTALLUILEVEL
{
INSTALLUILEVEL_NOCHANGE = 0,
INSTALLUILEVEL_DEFAULT = 1,
INSTALLUILEVEL_NONE = 2,
INSTALLUILEVEL_BASIC = 3,
INSTALLUILEVEL_REDUCED = 4,
INSTALLUILEVEL_FULL = 5,
INSTALLUILEVEL_HIDECANCEL = 0x20,
INSTALLUILEVEL_PROGRESSONLY = 0x40,
INSTALLUILEVEL_ENDDIALOG = 0x80,
INSTALLUILEVEL_SOURCERESONLY = 0x100
} INSTALLUILEVEL;
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
typedef enum tagUSERINFOSTATE
{
USERINFOSTATE_MOREDATA = -3,
USERINFOSTATE_INVALIDARG = -2,
USERINFOSTATE_UNKNOWN = -1,
USERINFOSTATE_ABSENT = 0,
USERINFOSTATE_PRESENT = 1,
} USERINFOSTATE;
typedef enum tagINSTALLLEVEL
{
INSTALLLEVEL_DEFAULT = 0,
INSTALLLEVEL_MINIMUM = 1,
INSTALLLEVEL_MAXIMUM = 0xFFFF
} INSTALLLEVEL;
typedef enum tagINSTALLMESSAGE
{
INSTALLMESSAGE_FATALEXIT = 0,
INSTALLMESSAGE_ERROR = 0x01000000,
INSTALLMESSAGE_WARNING = 0x02000000,
INSTALLMESSAGE_USER = 0x03000000,
INSTALLMESSAGE_INFO = 0x04000000,
INSTALLMESSAGE_FILESINUSE = 0x05000000,
INSTALLMESSAGE_RESOLVESOURCE = 0x06000000,
INSTALLMESSAGE_OUTOFDISKSPACE = 0x07000000,
INSTALLMESSAGE_ACTIONSTART = 0x08000000,
INSTALLMESSAGE_ACTIONDATA = 0x09000000,
INSTALLMESSAGE_PROGRESS = 0x0a000000,
INSTALLMESSAGE_COMMONDATA = 0x0b000000,
INSTALLMESSAGE_INITIALIZE = 0x0c000000,
INSTALLMESSAGE_TERMINATE = 0x0d000000,
2017-10-08 08:10:16 +00:00
INSTALLMESSAGE_SHOWDIALOG = 0x0e000000,
INSTALLMESSAGE_RMFILESINUSE = 0x19000000,
INSTALLMESSAGE_INSTALLSTART = 0x1A000000,
INSTALLMESSAGE_INSTALLEND = 0x1B000000,
} INSTALLMESSAGE;
typedef enum tagREINSTALLMODE
{
REINSTALLMODE_REPAIR = 0x00000001,
REINSTALLMODE_FILEMISSING = 0x00000002,
REINSTALLMODE_FILEOLDERVERSION = 0x00000004,
REINSTALLMODE_FILEEQUALVERSION = 0x00000008,
REINSTALLMODE_FILEEXACT = 0x00000010,
REINSTALLMODE_FILEVERIFY = 0x00000020,
REINSTALLMODE_FILEREPLACE = 0x00000040,
REINSTALLMODE_MACHINEDATA = 0x00000080,
REINSTALLMODE_USERDATA = 0x00000100,
REINSTALLMODE_SHORTCUT = 0x00000200,
REINSTALLMODE_PACKAGE = 0x00000400
} REINSTALLMODE;
typedef enum tagINSTALLLOGMODE
{
INSTALLLOGMODE_FATALEXIT = (1 << (INSTALLMESSAGE_FATALEXIT >> 24)),
INSTALLLOGMODE_ERROR = (1 << (INSTALLMESSAGE_ERROR >> 24)),
INSTALLLOGMODE_WARNING = (1 << (INSTALLMESSAGE_WARNING >> 24)),
INSTALLLOGMODE_USER = (1 << (INSTALLMESSAGE_USER >> 24)),
INSTALLLOGMODE_INFO = (1 << (INSTALLMESSAGE_INFO >> 24)),
2017-10-08 08:10:16 +00:00
INSTALLLOGMODE_FILESINUSE = (1 << (INSTALLMESSAGE_FILESINUSE >> 24)),
INSTALLLOGMODE_RESOLVESOURCE = (1 << (INSTALLMESSAGE_RESOLVESOURCE >> 24)),
INSTALLLOGMODE_OUTOFDISKSPACE = (1 << (INSTALLMESSAGE_OUTOFDISKSPACE >> 24)),
INSTALLLOGMODE_ACTIONSTART = (1 << (INSTALLMESSAGE_ACTIONSTART >> 24)),
INSTALLLOGMODE_ACTIONDATA = (1 << (INSTALLMESSAGE_ACTIONDATA >> 24)),
INSTALLLOGMODE_PROGRESS = (1 << (INSTALLMESSAGE_PROGRESS >> 24)),
2017-10-08 08:10:16 +00:00
INSTALLLOGMODE_PROPERTYDUMP = (1 << (INSTALLMESSAGE_PROGRESS >> 24)),
INSTALLLOGMODE_COMMONDATA = (1 << (INSTALLMESSAGE_COMMONDATA >> 24)),
INSTALLLOGMODE_INITIALIZE = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)),
2017-10-08 08:10:16 +00:00
INSTALLLOGMODE_VERBOSE = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)),
INSTALLLOGMODE_TERMINATE = (1 << (INSTALLMESSAGE_TERMINATE >> 24)),
2017-10-08 08:10:16 +00:00
INSTALLLOGMODE_EXTRADEBUG = (1 << (INSTALLMESSAGE_TERMINATE >> 24)),
INSTALLLOGMODE_SHOWDIALOG = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 24)),
INSTALLLOGMODE_RMFILESINUSE = (1 << (INSTALLMESSAGE_RMFILESINUSE >> 24)),
INSTALLLOGMODE_INSTALLSTART = (1 << (INSTALLMESSAGE_INSTALLSTART >> 24)),
INSTALLLOGMODE_INSTALLEND = (1 << (INSTALLMESSAGE_INSTALLEND >> 24)),
} INSTALLLOGMODE;
typedef enum tagINSTALLLOGATTRIBUTES
{
INSTALLLOGATTRIBUTES_APPEND = 0x00000001,
INSTALLLOGATTRIBUTES_FLUSHEACHLINE = 0x00000002
} INSTALLLOGATTRIBUTES;
Sync to Wine-0_9_1: Ivan Leo Puoti <ivanleo@gmail.com> - Fix some wrong prototypes. Thomas Weidenmueller <wine-patches@reactsoft.com> - Passing NULL as the last two parameters to ReadFile is illegal and actually causes a crash on windows. The attached patch fixes this. Aric Stewart <aric@codeweavers.com> - Force files to install if the REINSTALL property is set. Mike McCormack <mike@codeweavers.com> - Some installers don't call the CreateFolders action before the InstallFiles action as MSDN specifies, but it still seems to work, so make sure that we create component directories in the InstallFiles action anyway. - Create component folders in the CreateFolders action. - If an action fails, print out its name as well as the error code. Use %d for error codes so it's easy to match them up to something in winerror.h. - Rename load_dynamic_stringW to msi_dup_record_field to better describe what it does, and replace a few instances with MSI_RecordGetString to avoid allocating memory. - Tidy up the RegisterProduct action a little. - Create a stub function to apply a single table transform and call it where we need to apply transforms. - Enumerate the substorage transforms for any patches that are passed on the command line with PATCH=. Need to implement table_apply_transform() before this will do anything interesting. - Simplify register_progid() and remove a fixed length buffer. - Make enter and escape trigger the default and cancel buttons in dialogs. - Switch back to using IPicture to load images. LoadImage did the resizing for us, but doesn't handle jpeg files and requires us writing a temp file, whereas IPicture handles jpeg files and can load directly from a stream. - Remove unused package parameter of register_progid_base(). - Remove an incorrect comment and check for 0 being an invalid file handle. - Add missing semicolons that caused compile trouble on FreeBSD. - Extract file directly to their target location, bypassing the need to use temporary files and move files. - Put the UI update code for cabinet file into a separate function. - Translate INVALID_HANDLE_VALUE to zero for cabinet handles. - Fix a memory leak in the cabinet extracting code. - Fix passing of NULL pointers to MsiDecomposeDescriptor and add a test. - Fix parameter handling in MsiSetTargetPath, and add a test for it. - Deleted two buggy functions that incorrectly and inefficiently check whether a row already exists in a table, and replaced them with a call to an existing working function that does the same thing correctly. - Fix and test MsiGetProperty and MsiSetProperty. - Add a stub implementation of msi.MsiSetMode. - NULL and empty strings are the same in conditions. - Add a bunch of tests for MsiEvaluateCondition and make them pass. - Fix error handling in MsiEvaluateCondition. - Create the +msidb debug channel for msi database code. - Implement transforms. This still includes some debugging code which can be enabled by setting debug_transform to 1 in the relevant places. - Define NONAMELESSUNION and NONAMELESSSTRUCT for older compilers. - Remove some redundant null pointer checks. - Make sure to unregister all the classes that were registered when msi is unloaded, so we can register again cleanly. - Fix a memory leak. - Implement the RemoveFiles action. - Add a read-only implementation of the SelectionTree control. - Make sure we only CoUninitialize after successfully initializing. Fix the address of the returned IShellLinkDataList interface. - Use an enumeration for file states. - Handle MaskEdit masks containing dashes and other constant characters. - Stub implementation for MsiAdvertiseScriptA/W. - Add a stub for the AllocateRegistrySpace action. - Explicitly check for MSICONDITION_TRUE being returned from MsiEvaluateCondition. - Stub implementation for MsiGetFileHashA/W. - Define MSIDBOPEN_ constants using LPCWSTR when compiling Wine. - Improve MsiUseFeatureEx and MsiGetFeatureState a little, add some simple test cases. - Use msi_get_property_int() in a few more places. - Implement MsiGetFeatureUsageA and MsiUseFeature(Ex)A using their W versions. - Use "static const" rather than "const static" as gcc -W complains about the former. - Add an implementation for MsiGetShortcutTargetA/W. - Don't change the UI level during ExecuteAction. - Return an error in MsiGetComponentPathW if passed a null component. - Remove the unused 1st parameter of ACTION_VerifyComponentForAction. - Fix MsiGetPropertyA/W spec declarations. - Create an internal handle-free api for reading MSI database summary information. svn path=/trunk/; revision=19307
2005-11-17 20:49:37 +00:00
typedef enum tagINSTALLMODE
{
INSTALLMODE_NODETECTION_ANY = -4,
INSTALLMODE_NOSOURCERESOLUTION = -3,
INSTALLMODE_NODETECTION = -2,
INSTALLMODE_EXISTING = -1,
INSTALLMODE_DEFAULT = 0
} INSTALLMODE;
typedef enum tagADVERTISEFLAGS
{
ADVERTISEFLAGS_MACHINEASSIGN = 0,
ADVERTISEFLAGS_USERASSIGN = 1
} ADVERTISEFLAGS;
Sync to Wine-0_9_1: Ivan Leo Puoti <ivanleo@gmail.com> - Fix some wrong prototypes. Thomas Weidenmueller <wine-patches@reactsoft.com> - Passing NULL as the last two parameters to ReadFile is illegal and actually causes a crash on windows. The attached patch fixes this. Aric Stewart <aric@codeweavers.com> - Force files to install if the REINSTALL property is set. Mike McCormack <mike@codeweavers.com> - Some installers don't call the CreateFolders action before the InstallFiles action as MSDN specifies, but it still seems to work, so make sure that we create component directories in the InstallFiles action anyway. - Create component folders in the CreateFolders action. - If an action fails, print out its name as well as the error code. Use %d for error codes so it's easy to match them up to something in winerror.h. - Rename load_dynamic_stringW to msi_dup_record_field to better describe what it does, and replace a few instances with MSI_RecordGetString to avoid allocating memory. - Tidy up the RegisterProduct action a little. - Create a stub function to apply a single table transform and call it where we need to apply transforms. - Enumerate the substorage transforms for any patches that are passed on the command line with PATCH=. Need to implement table_apply_transform() before this will do anything interesting. - Simplify register_progid() and remove a fixed length buffer. - Make enter and escape trigger the default and cancel buttons in dialogs. - Switch back to using IPicture to load images. LoadImage did the resizing for us, but doesn't handle jpeg files and requires us writing a temp file, whereas IPicture handles jpeg files and can load directly from a stream. - Remove unused package parameter of register_progid_base(). - Remove an incorrect comment and check for 0 being an invalid file handle. - Add missing semicolons that caused compile trouble on FreeBSD. - Extract file directly to their target location, bypassing the need to use temporary files and move files. - Put the UI update code for cabinet file into a separate function. - Translate INVALID_HANDLE_VALUE to zero for cabinet handles. - Fix a memory leak in the cabinet extracting code. - Fix passing of NULL pointers to MsiDecomposeDescriptor and add a test. - Fix parameter handling in MsiSetTargetPath, and add a test for it. - Deleted two buggy functions that incorrectly and inefficiently check whether a row already exists in a table, and replaced them with a call to an existing working function that does the same thing correctly. - Fix and test MsiGetProperty and MsiSetProperty. - Add a stub implementation of msi.MsiSetMode. - NULL and empty strings are the same in conditions. - Add a bunch of tests for MsiEvaluateCondition and make them pass. - Fix error handling in MsiEvaluateCondition. - Create the +msidb debug channel for msi database code. - Implement transforms. This still includes some debugging code which can be enabled by setting debug_transform to 1 in the relevant places. - Define NONAMELESSUNION and NONAMELESSSTRUCT for older compilers. - Remove some redundant null pointer checks. - Make sure to unregister all the classes that were registered when msi is unloaded, so we can register again cleanly. - Fix a memory leak. - Implement the RemoveFiles action. - Add a read-only implementation of the SelectionTree control. - Make sure we only CoUninitialize after successfully initializing. Fix the address of the returned IShellLinkDataList interface. - Use an enumeration for file states. - Handle MaskEdit masks containing dashes and other constant characters. - Stub implementation for MsiAdvertiseScriptA/W. - Add a stub for the AllocateRegistrySpace action. - Explicitly check for MSICONDITION_TRUE being returned from MsiEvaluateCondition. - Stub implementation for MsiGetFileHashA/W. - Define MSIDBOPEN_ constants using LPCWSTR when compiling Wine. - Improve MsiUseFeatureEx and MsiGetFeatureState a little, add some simple test cases. - Use msi_get_property_int() in a few more places. - Implement MsiGetFeatureUsageA and MsiUseFeature(Ex)A using their W versions. - Use "static const" rather than "const static" as gcc -W complains about the former. - Add an implementation for MsiGetShortcutTargetA/W. - Don't change the UI level during ExecuteAction. - Return an error in MsiGetComponentPathW if passed a null component. - Remove the unused 1st parameter of ACTION_VerifyComponentForAction. - Fix MsiGetPropertyA/W spec declarations. - Create an internal handle-free api for reading MSI database summary information. svn path=/trunk/; revision=19307
2005-11-17 20:49:37 +00:00
typedef enum tagSCRIPTFLAGS
{
SCRIPTFLAGS_CACHEINFO = 1,
SCRIPTFLAGS_SHORTCUTS = 4,
SCRIPTFLAGS_MACHINEASSIGN = 8,
SCRIPTFLAGS_REGDATA_APPINFO = 0x10,
SCRIPTFLAGS_REGDATA_CNFGINFO = 0x20,
SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST = 0x40,
SCRIPTFLAGS_REGDATA_CLASSINFO = 0x80,
SCRIPTFLAGS_REGDATA_EXTENSIONINFO = 0x100,
} SCRIPTFLAGS;
typedef enum tagINSTALLTYPE
{
INSTALLTYPE_DEFAULT = 0,
INSTALLTYPE_NETWORK_IMAGE = 1,
INSTALLTYPE_SINGLE_INSTANCE = 2,
} INSTALLTYPE;
Sync to Wine-20050725: Robert Shearman <rob@codeweavers.com> - In MsiLocateComponent pcchBuf can be NULL so don't try to dereference it. Alexandre Julliard <julliard@winehq.org> - Use the official names for the Unicode string constants. Aric Stewart <aric@codeweavers.com> - Implement MsiGetLanguage. - Relocate the msi file to prevent cd locking, corrected to properly not try to relocated #nnnn handles as files. - Use the SourceList functions to get the source path in ConfigureProductExW. - Handle installs off multiple volumes and properly pull the prompt string from the error table. - If MsiGetProperty(A/W) is called with a NULL for the value buffer but a value in the size for the value buffer, then Msi fills in the size of the value into the pointer for size. This is tested and confirmed with native MSI. - Bail out if the reg key is empty. This prevents us from writing garbage to the property table. - Properly resize the buffer based on ERROR_MORE_DATA. Also remember to free the allocated buffer. - Further testing shows that when CustomActionData needs to be blank it is an empty string not ' '. - Correct an error where I was not properly advancing a pointer. - Add source.c to start handling the various MsiSourceList apis used in v3 of MSI, and now internally. - Update files.c to use the MsiSourceList apis to make sure our SourceList keys in the registry are included and correct. - Use the strings defined in msi.h. - Use SOURCEDIR instead of PackagePath. Because the PackagePath may be local, while SOURCEDIR is more proper and will be a full directory. - InstallShield does a number of actions using DoAction before the Install starts so the PackageCode needs to be loaded on OpenPackage instead of the beginning of the install process. - When working toward install on demand support we need to reset all the constant values so that multiple install process do not get confused by leftover values from the previous install. - Fill and use the ProductCode part of the MSIPACKAGE structure. - Add the string constants located in msi.h and make use of them in files.c and source.c. - Keep track of what sequence we are in and register unique actions. This allows us to make sure actions and custom actions flagged to run only once, actually run only once. - Also clean up some of the numeric constants in custom.c using the defined values from msidefs.h. Mike McCormack <mike@codeweavers.com> - gcc 4.0 -Wpointer-sign fixes. - Display icons in buttons that have them. - Use LoadImage to load bitmaps and icons. - Set the initial focus on the control specified by Control_First in the Dialog table. - Move to the next mask edit field when the current one becomes full. - Make the tab order in msi dialogs right. - Don't crash when cancelling out of a modeless dialog. - Stop the install when cancelling from a modeless dialog. svn path=/trunk/; revision=17331
2005-08-12 17:07:28 +00:00
typedef enum tagMSIINSTALLCONTEXT
{
MSIINSTALLCONTEXT_FIRSTVISIBLE = 0,
MSIINSTALLCONTEXT_NONE = 0,
MSIINSTALLCONTEXT_USERMANAGED = 1,
MSIINSTALLCONTEXT_USERUNMANAGED = 2,
MSIINSTALLCONTEXT_MACHINE = 4,
MSIINSTALLCONTEXT_ALL = (MSIINSTALLCONTEXT_USERMANAGED | MSIINSTALLCONTEXT_USERUNMANAGED | MSIINSTALLCONTEXT_MACHINE),
MSIINSTALLCONTEXT_ALLUSERMANAGED= 8,
} MSIINSTALLCONTEXT;
typedef enum tagMSISOURCETYPE
{
MSISOURCETYPE_UNKNOWN = 0x00000000L,
MSISOURCETYPE_NETWORK = 0x00000001L,
MSISOURCETYPE_URL = 0x00000002L,
MSISOURCETYPE_MEDIA = 0x00000004L
Sync to Wine-20050725: Robert Shearman <rob@codeweavers.com> - In MsiLocateComponent pcchBuf can be NULL so don't try to dereference it. Alexandre Julliard <julliard@winehq.org> - Use the official names for the Unicode string constants. Aric Stewart <aric@codeweavers.com> - Implement MsiGetLanguage. - Relocate the msi file to prevent cd locking, corrected to properly not try to relocated #nnnn handles as files. - Use the SourceList functions to get the source path in ConfigureProductExW. - Handle installs off multiple volumes and properly pull the prompt string from the error table. - If MsiGetProperty(A/W) is called with a NULL for the value buffer but a value in the size for the value buffer, then Msi fills in the size of the value into the pointer for size. This is tested and confirmed with native MSI. - Bail out if the reg key is empty. This prevents us from writing garbage to the property table. - Properly resize the buffer based on ERROR_MORE_DATA. Also remember to free the allocated buffer. - Further testing shows that when CustomActionData needs to be blank it is an empty string not ' '. - Correct an error where I was not properly advancing a pointer. - Add source.c to start handling the various MsiSourceList apis used in v3 of MSI, and now internally. - Update files.c to use the MsiSourceList apis to make sure our SourceList keys in the registry are included and correct. - Use the strings defined in msi.h. - Use SOURCEDIR instead of PackagePath. Because the PackagePath may be local, while SOURCEDIR is more proper and will be a full directory. - InstallShield does a number of actions using DoAction before the Install starts so the PackageCode needs to be loaded on OpenPackage instead of the beginning of the install process. - When working toward install on demand support we need to reset all the constant values so that multiple install process do not get confused by leftover values from the previous install. - Fill and use the ProductCode part of the MSIPACKAGE structure. - Add the string constants located in msi.h and make use of them in files.c and source.c. - Keep track of what sequence we are in and register unique actions. This allows us to make sure actions and custom actions flagged to run only once, actually run only once. - Also clean up some of the numeric constants in custom.c using the defined values from msidefs.h. Mike McCormack <mike@codeweavers.com> - gcc 4.0 -Wpointer-sign fixes. - Display icons in buttons that have them. - Use LoadImage to load bitmaps and icons. - Set the initial focus on the control specified by Control_First in the Dialog table. - Move to the next mask edit field when the current one becomes full. - Make the tab order in msi dialogs right. - Don't crash when cancelling out of a modeless dialog. - Stop the install when cancelling from a modeless dialog. svn path=/trunk/; revision=17331
2005-08-12 17:07:28 +00:00
} MSISOURCETYPE;
typedef enum tagMSICODE
{
MSICODE_PRODUCT = 0x00000000L,
MSICODE_PATCH = 0x40000000L
Sync to Wine-20050725: Robert Shearman <rob@codeweavers.com> - In MsiLocateComponent pcchBuf can be NULL so don't try to dereference it. Alexandre Julliard <julliard@winehq.org> - Use the official names for the Unicode string constants. Aric Stewart <aric@codeweavers.com> - Implement MsiGetLanguage. - Relocate the msi file to prevent cd locking, corrected to properly not try to relocated #nnnn handles as files. - Use the SourceList functions to get the source path in ConfigureProductExW. - Handle installs off multiple volumes and properly pull the prompt string from the error table. - If MsiGetProperty(A/W) is called with a NULL for the value buffer but a value in the size for the value buffer, then Msi fills in the size of the value into the pointer for size. This is tested and confirmed with native MSI. - Bail out if the reg key is empty. This prevents us from writing garbage to the property table. - Properly resize the buffer based on ERROR_MORE_DATA. Also remember to free the allocated buffer. - Further testing shows that when CustomActionData needs to be blank it is an empty string not ' '. - Correct an error where I was not properly advancing a pointer. - Add source.c to start handling the various MsiSourceList apis used in v3 of MSI, and now internally. - Update files.c to use the MsiSourceList apis to make sure our SourceList keys in the registry are included and correct. - Use the strings defined in msi.h. - Use SOURCEDIR instead of PackagePath. Because the PackagePath may be local, while SOURCEDIR is more proper and will be a full directory. - InstallShield does a number of actions using DoAction before the Install starts so the PackageCode needs to be loaded on OpenPackage instead of the beginning of the install process. - When working toward install on demand support we need to reset all the constant values so that multiple install process do not get confused by leftover values from the previous install. - Fill and use the ProductCode part of the MSIPACKAGE structure. - Add the string constants located in msi.h and make use of them in files.c and source.c. - Keep track of what sequence we are in and register unique actions. This allows us to make sure actions and custom actions flagged to run only once, actually run only once. - Also clean up some of the numeric constants in custom.c using the defined values from msidefs.h. Mike McCormack <mike@codeweavers.com> - gcc 4.0 -Wpointer-sign fixes. - Display icons in buttons that have them. - Use LoadImage to load bitmaps and icons. - Set the initial focus on the control specified by Control_First in the Dialog table. - Move to the next mask edit field when the current one becomes full. - Make the tab order in msi dialogs right. - Don't crash when cancelling out of a modeless dialog. - Stop the install when cancelling from a modeless dialog. svn path=/trunk/; revision=17331
2005-08-12 17:07:28 +00:00
} MSICODE;
typedef enum tagINSTALLFEATUREATTRIBUTE
{
INSTALLFEATUREATTRIBUTE_FAVORLOCAL = 1 << 0,
INSTALLFEATUREATTRIBUTE_FAVORSOURCE = 1 << 1,
INSTALLFEATUREATTRIBUTE_FOLLOWPARENT = 1 << 2,
INSTALLFEATUREATTRIBUTE_FAVORADVERTISE = 1 << 3,
INSTALLFEATUREATTRIBUTE_DISALLOWADVERTISE = 1 << 4,
INSTALLFEATUREATTRIBUTE_NOUNSUPPORTEDADVERTISE = 1 << 5
} INSTALLFEATUREATTRIBUTE;
Sync to Wine-0_9_1: Ivan Leo Puoti <ivanleo@gmail.com> - Fix some wrong prototypes. Thomas Weidenmueller <wine-patches@reactsoft.com> - Passing NULL as the last two parameters to ReadFile is illegal and actually causes a crash on windows. The attached patch fixes this. Aric Stewart <aric@codeweavers.com> - Force files to install if the REINSTALL property is set. Mike McCormack <mike@codeweavers.com> - Some installers don't call the CreateFolders action before the InstallFiles action as MSDN specifies, but it still seems to work, so make sure that we create component directories in the InstallFiles action anyway. - Create component folders in the CreateFolders action. - If an action fails, print out its name as well as the error code. Use %d for error codes so it's easy to match them up to something in winerror.h. - Rename load_dynamic_stringW to msi_dup_record_field to better describe what it does, and replace a few instances with MSI_RecordGetString to avoid allocating memory. - Tidy up the RegisterProduct action a little. - Create a stub function to apply a single table transform and call it where we need to apply transforms. - Enumerate the substorage transforms for any patches that are passed on the command line with PATCH=. Need to implement table_apply_transform() before this will do anything interesting. - Simplify register_progid() and remove a fixed length buffer. - Make enter and escape trigger the default and cancel buttons in dialogs. - Switch back to using IPicture to load images. LoadImage did the resizing for us, but doesn't handle jpeg files and requires us writing a temp file, whereas IPicture handles jpeg files and can load directly from a stream. - Remove unused package parameter of register_progid_base(). - Remove an incorrect comment and check for 0 being an invalid file handle. - Add missing semicolons that caused compile trouble on FreeBSD. - Extract file directly to their target location, bypassing the need to use temporary files and move files. - Put the UI update code for cabinet file into a separate function. - Translate INVALID_HANDLE_VALUE to zero for cabinet handles. - Fix a memory leak in the cabinet extracting code. - Fix passing of NULL pointers to MsiDecomposeDescriptor and add a test. - Fix parameter handling in MsiSetTargetPath, and add a test for it. - Deleted two buggy functions that incorrectly and inefficiently check whether a row already exists in a table, and replaced them with a call to an existing working function that does the same thing correctly. - Fix and test MsiGetProperty and MsiSetProperty. - Add a stub implementation of msi.MsiSetMode. - NULL and empty strings are the same in conditions. - Add a bunch of tests for MsiEvaluateCondition and make them pass. - Fix error handling in MsiEvaluateCondition. - Create the +msidb debug channel for msi database code. - Implement transforms. This still includes some debugging code which can be enabled by setting debug_transform to 1 in the relevant places. - Define NONAMELESSUNION and NONAMELESSSTRUCT for older compilers. - Remove some redundant null pointer checks. - Make sure to unregister all the classes that were registered when msi is unloaded, so we can register again cleanly. - Fix a memory leak. - Implement the RemoveFiles action. - Add a read-only implementation of the SelectionTree control. - Make sure we only CoUninitialize after successfully initializing. Fix the address of the returned IShellLinkDataList interface. - Use an enumeration for file states. - Handle MaskEdit masks containing dashes and other constant characters. - Stub implementation for MsiAdvertiseScriptA/W. - Add a stub for the AllocateRegistrySpace action. - Explicitly check for MSICONDITION_TRUE being returned from MsiEvaluateCondition. - Stub implementation for MsiGetFileHashA/W. - Define MSIDBOPEN_ constants using LPCWSTR when compiling Wine. - Improve MsiUseFeatureEx and MsiGetFeatureState a little, add some simple test cases. - Use msi_get_property_int() in a few more places. - Implement MsiGetFeatureUsageA and MsiUseFeature(Ex)A using their W versions. - Use "static const" rather than "const static" as gcc -W complains about the former. - Add an implementation for MsiGetShortcutTargetA/W. - Don't change the UI level during ExecuteAction. - Return an error in MsiGetComponentPathW if passed a null component. - Remove the unused 1st parameter of ACTION_VerifyComponentForAction. - Fix MsiGetPropertyA/W spec declarations. - Create an internal handle-free api for reading MSI database summary information. svn path=/trunk/; revision=19307
2005-11-17 20:49:37 +00:00
typedef struct _MSIFILEHASHINFO {
ULONG dwFileHashInfoSize;
ULONG dwData[4];
} MSIFILEHASHINFO, *PMSIFILEHASHINFO;
typedef enum tagMSIPATCHDATATYPE
{
MSIPATCH_DATATYPE_PATCHFILE = 0,
MSIPATCH_DATATYPE_XMLPATH = 1,
MSIPATCH_DATATYPE_XMLBLOB = 2,
} MSIPATCHDATATYPE, *PMSIPATCHDATATYPE;
typedef struct tagMSIPATCHSEQUENCEINFOA
{
LPCSTR szPatchData;
MSIPATCHDATATYPE ePatchDataType;
DWORD dwOrder;
UINT uStatus;
} MSIPATCHSEQUENCEINFOA, *PMSIPATCHSEQUENCEINFOA;
typedef struct tagMSIPATCHSEQUENCEINFOW
{
LPCWSTR szPatchData;
MSIPATCHDATATYPE ePatchDataType;
DWORD dwOrder;
UINT uStatus;
} MSIPATCHSEQUENCEINFOW, *PMSIPATCHSEQUENCEINFOW;
#define MAX_FEATURE_CHARS 38
#define ERROR_PATCH_TARGET_NOT_FOUND 1642
Sync to Wine-20050725: Robert Shearman <rob@codeweavers.com> - In MsiLocateComponent pcchBuf can be NULL so don't try to dereference it. Alexandre Julliard <julliard@winehq.org> - Use the official names for the Unicode string constants. Aric Stewart <aric@codeweavers.com> - Implement MsiGetLanguage. - Relocate the msi file to prevent cd locking, corrected to properly not try to relocated #nnnn handles as files. - Use the SourceList functions to get the source path in ConfigureProductExW. - Handle installs off multiple volumes and properly pull the prompt string from the error table. - If MsiGetProperty(A/W) is called with a NULL for the value buffer but a value in the size for the value buffer, then Msi fills in the size of the value into the pointer for size. This is tested and confirmed with native MSI. - Bail out if the reg key is empty. This prevents us from writing garbage to the property table. - Properly resize the buffer based on ERROR_MORE_DATA. Also remember to free the allocated buffer. - Further testing shows that when CustomActionData needs to be blank it is an empty string not ' '. - Correct an error where I was not properly advancing a pointer. - Add source.c to start handling the various MsiSourceList apis used in v3 of MSI, and now internally. - Update files.c to use the MsiSourceList apis to make sure our SourceList keys in the registry are included and correct. - Use the strings defined in msi.h. - Use SOURCEDIR instead of PackagePath. Because the PackagePath may be local, while SOURCEDIR is more proper and will be a full directory. - InstallShield does a number of actions using DoAction before the Install starts so the PackageCode needs to be loaded on OpenPackage instead of the beginning of the install process. - When working toward install on demand support we need to reset all the constant values so that multiple install process do not get confused by leftover values from the previous install. - Fill and use the ProductCode part of the MSIPACKAGE structure. - Add the string constants located in msi.h and make use of them in files.c and source.c. - Keep track of what sequence we are in and register unique actions. This allows us to make sure actions and custom actions flagged to run only once, actually run only once. - Also clean up some of the numeric constants in custom.c using the defined values from msidefs.h. Mike McCormack <mike@codeweavers.com> - gcc 4.0 -Wpointer-sign fixes. - Display icons in buttons that have them. - Use LoadImage to load bitmaps and icons. - Set the initial focus on the control specified by Control_First in the Dialog table. - Move to the next mask edit field when the current one becomes full. - Make the tab order in msi dialogs right. - Don't crash when cancelling out of a modeless dialog. - Stop the install when cancelling from a modeless dialog. svn path=/trunk/; revision=17331
2005-08-12 17:07:28 +00:00
/* Strings defined in msi.h */
/* Advertised Information */
#define INSTALLPROPERTY_PACKAGENAMEA "PackageName"
static const WCHAR INSTALLPROPERTY_PACKAGENAMEW[] = {'P','a','c','k','a','g','e','N','a','m','e',0};
#define INSTALLPROPERTY_PACKAGENAME WINELIB_NAME_AW(INSTALLPROPERTY_PACKAGENAME)
#define INSTALLPROPERTY_TRANSFORMSA "Transforms"
static const WCHAR INSTALLPROPERTY_TRANSFORMSW[] = {'T','r','a','n','s','f','o','r','m','s',0};
#define INSTALLPROPERTY_TRANSFORMS WINELIB_NAME_AW(INSTALLPROPERTY_TRANSFORMS)
#define INSTALLPROPERTY_LANGUAGEA "Language"
static const WCHAR INSTALLPROPERTY_LANGUAGEW[] = {'L','a','n','g','u','a','g','e',0};
#define INSTALLPROPERTY_LANGUAGE WINELIB_NAME_AW(INSTALLPROPERTY_LANGUAGE)
#define INSTALLPROPERTY_PRODUCTNAMEA "ProductName"
static const WCHAR INSTALLPROPERTY_PRODUCTNAMEW[] = {'P','r','o','d','u','c','t','N','a','m','e',0};
#define INSTALLPROPERTY_PRODUCTNAME WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTNAME)
#define INSTALLPROPERTY_ASSIGNMENTTYPEA "AssignmentType"
static const WCHAR INSTALLPROPERTY_ASSIGNMENTTYPEW[] = {'A','s','s','i','g','n','m','e','n','t','T','y','p','e',0};
#define INSTALLPROPERTY_ASSIGNMENTTYPE WINELIB_NAME_AW(INSTALLPROPERTY_ASSIGNMENTTYPE)
#define INSTALLPROPERTY_PACKAGECODEA "PackageCode"
static const WCHAR INSTALLPROPERTY_PACKAGECODEW[] = {'P','a','c','k','a','g','e','C','o','d','e',0};
#define INSTALLPROPERTY_PACKAGECODE WINELIB_NAME_AW(INSTALLPROPERTY_PACKAGECODE)
#define INSTALLPROPERTY_VERSIONA "Version"
static const WCHAR INSTALLPROPERTY_VERSIONW[]= {'V','e','r','s','i','o','n',0};
#define INSTALLPROPERTY_VERSION WINELIB_NAME_AW(INSTALLPROPERTY_VERSION)
/* MSI version 1.1 and above */
#define INSTALLPROPERTY_PRODUCTICONA "ProductIcon"
static const WCHAR INSTALLPROPERTY_PRODUCTICONW[] = {'P','r','o','d','u','c','t','I','c','o','n',0};
#define INSTALLPROPERTY_PRODUCTICON WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTICON)
/* MSI version 1.5 and above */
#define INSTALLPROPERTY_INSTANCETYPEA "InstanceType"
static const WCHAR INSTALLPROPERTY_INSTANCETYPEW[] = {'I','n','s','t','a','n','c','e','T','y','p','e',0};
#define INSTALLPROPERTY_INSTANCETYPE WINELIB_NAME_AW(INSTALLPROPERTY_INSTANCETYPE)
/* MSI version 3 and above */
#define INSTALLPROPERTY_AUTHORIZED_LUA_APPA "AuthorizedLUAApp"
static const WCHAR INSTALLPROPERTY_AUTHORIZED_LUA_APPW[] = {'A','u','t','h','o','r','i','z','e','d','L','U','A','A','p','p',0};
#define INSTALLPROPERTY_AUTHORIZED_LUA_APP WINELIB_NAME_AW(INSTALLPROPERTY_AUTHORIZED_LUA_APP)
/* Installed Information */
#define INSTALLPROPERTY_INSTALLEDPRODUCTNAMEA "InstalledProductName"
static const WCHAR INSTALLPROPERTY_INSTALLEDPRODUCTNAMEW[] = {'I','n','s','t','a','l','l','e','d','P','r','o','d','u','c','t','N','a','m','e',0};
#define INSTALLPROPERTY_INSTALLEDPRODUCTNAME WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLEDPRODUCTNAME)
#define INSTALLPROPERTY_VERSIONSTRINGA "VersionString"
static const WCHAR INSTALLPROPERTY_VERSIONSTRINGW[] = {'V','e','r','s','i','o','n','S','t','r','i','n','g',0};
#define INSTALLPROPERTY_VERSIONSTRING WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONSTRING)
#define INSTALLPROPERTY_HELPLINKA "HelpLink"
static const WCHAR INSTALLPROPERTY_HELPLINKW[] = {'H','e','l','p','L','i','n','k',0};
#define INSTALLPROPERTY_HELPLINK WINELIB_NAME_AW(INSTALLPROPERTY_HELPLINK)
#define INSTALLPROPERTY_HELPTELEPHONEA "HelpTelephone"
static const WCHAR INSTALLPROPERTY_HELPTELEPHONEW[] = {'H','e','l','p','T','e','l','e','p','h','o','n','e',0};
#define INSTALLPROPERTY_HELPTELEPHONE WINELIB_NAME_AW(INSTALLPROPERTY_HELPTELEPHONE)
#define INSTALLPROPERTY_INSTALLLOCATIONA "InstallLocation"
static const WCHAR INSTALLPROPERTY_INSTALLLOCATIONW[] = {'I','n','s','t','a','l','l','L','o','c','a','t','i','o','n',0};
#define INSTALLPROPERTY_INSTALLLOCATION WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLLOCATION)
#define INSTALLPROPERTY_INSTALLSOURCEA "InstallSource"
static const WCHAR INSTALLPROPERTY_INSTALLSOURCEW[] = {'I','n','s','t','a','l','l','S','o','u','r','c','e',0};
#define INSTALLPROPERTY_INSTALLSOURCE WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLSOURCE)
#define INSTALLPROPERTY_INSTALLDATEA "InstallDate"
static const WCHAR INSTALLPROPERTY_INSTALLDATEW[] = {'I','n','s','t','a','l','l','D','a','t','e',0};
#define INSTALLPROPERTY_INSTALLDATE WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLDATE)
#define INSTALLPROPERTY_PUBLISHERA "Publisher"
static const WCHAR INSTALLPROPERTY_PUBLISHERW[] ={'P','u','b','l','i','s','h','e','r',0};
#define INSTALLPROPERTY_PUBLISHER WINELIB_NAME_AW(INSTALLPROPERTY_PUBLISHER)
#define INSTALLPROPERTY_LOCALPACKAGEA "LocalPackage"
static const WCHAR INSTALLPROPERTY_LOCALPACKAGEW[] = {'L','o','c','a','l','P','a','c','k','a','g','e',0};
#define INSTALLPROPERTY_LOCALPACKAGE WINELIB_NAME_AW(INSTALLPROPERTY_LOCALPACKAGE)
#define INSTALLPROPERTY_URLINFOABOUTA "URLInfoAbout"
static const WCHAR INSTALLPROPERTY_URLINFOABOUTW[] = {'U','R','L','I','n','f','o','A','b','o','u','t',0};
#define INSTALLPROPERTY_URLINFOABOUT WINELIB_NAME_AW(INSTALLPROPERTY_URLINFOABOUT)
#define INSTALLPROPERTY_URLUPDATEINFOA "URLUpdateInfo"
static const WCHAR INSTALLPROPERTY_URLUPDATEINFOW[] = {'U','R','L','U','p','d','a','t','e','I','n','f','o',0};
#define INSTALLPROPERTY_URLUPDATEINFO WINELIB_NAME_AW(INSTALLPROPERTY_URLUPDATEINFO)
#define INSTALLPROPERTY_VERSIONMINORA "VersionMinor"
static const WCHAR INSTALLPROPERTY_VERSIONMINORW[] = {'V','e','r','s','i','o','n','M','i','n','o','r',0};
#define INSTALLPROPERTY_VERSIONMINOR WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONMINOR)
#define INSTALLPROPERTY_VERSIONMAJORA "VersionMajor"
static const WCHAR INSTALLPROPERTY_VERSIONMAJORW[] = {'V','e','r','s','i','o','n','M','a','j','o','r',0};
#define INSTALLPROPERTY_VERSIONMAJOR WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONMAJOR)
#define INSTALLPROPERTY_PRODUCTIDA "ProductID"
static const WCHAR INSTALLPROPERTY_PRODUCTIDW[] = {'P','r','o','d','u','c','t','I','D',0};
#define INSTALLPROPERTY_PRODUCTID WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTID)
#define INSTALLPROPERTY_REGCOMPANYA "RegCompany"
static const WCHAR INSTALLPROPERTY_REGCOMPANYW[] = {'R','e','g','C','o','m','p','a','n','y',0};
#define INSTALLPROPERTY_REGCOMPANY WINELIB_NAME_AW(INSTALLPROPERTY_REGCOMPANY)
#define INSTALLPROPERTY_REGOWNERA "RegOwner"
static const WCHAR INSTALLPROPERTY_REGOWNERW[] = {'R','e','g','O','w','n','e','r',0};
#define INSTALLPROPERTY_REGOWNER WINELIB_NAME_AW(INSTALLPROPERTY_REGOWNER)
/* MSI Version 3.0 and greater */
#define INSTALLPROPERTY_UNINSTALLABLEA "Uninstallable"
static const WCHAR INSTALLPROPERTY_UNINSTALLABLEW[] = {'U','n','i','n','s','t','a','l','l','a','b','l','e',0};
#define INSTALLPROPERTY_UNINSTALLABLE WINELIB_NAME_AW(INSTALLPROPERTY_UNINSTALLABLE)
#define INSTALLPROPERTY_PRODUCTSTATEA "State"
static const WCHAR INSTALLPROPERTY_PRODUCTSTATEW[] = {'S','t','a','t','e',0};
#define INSTALLPROPERTY_PRODUCTSTATE WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTSTATE)
#define INSTALLPROPERTY_PATCHSTATEA "State"
static const WCHAR INSTALLPROPERTY_PATCHSTATEW[] ={'S','t','a','t','e',0};
#define INSTALLPROPERTY_PATCHSTATE WINELIB_NAME_AW(INSTALLPROPERTY_PATCHSTATE)
#define INSTALLPROPERTY_PATCHTYPEA "PatchType"
static const WCHAR INSTALLPROPERTY_PATCHTYPEW[] = {'P','a','t','c','h','T','y','p','e',0};
#define INSTALLPROPERTY_PATCHTYPE WINELIB_NAME_AW(INSTALLPROPERTY_PATCHTYPE)
#define INSTALLPROPERTY_LUAENABLEDA "LUAEnabled"
static const WCHAR INSTALLPROPERTY_LUAENABLEDW[] = {'L','U','A','E','n','a','b','l','e','d',0};
#define INSTALLPROPERTY_LUAENABLED WINELIB_NAME_AW(INSTALLPROPERTY_LUAENABLED)
#define INSTALLPROPERTY_DISPLAYNAMEA "DisplayName"
static const WCHAR INSTALLPROPERTY_DISPLAYNAMEW[] = {'D','i','s','p','l','a','y','N','a','m','e',0};
#define INSTALLPROPERTY_DISPLAYNAME WINELIB_NAME_AW(INSTALLPROPERTY_DISPLAYNAME)
#define INSTALLPROPERTY_MOREINFOURLA "MoreInfoURL"
static const WCHAR INSTALLPROPERTY_MOREINFOURLW[] = {'M','o','r','e','I','n','f','o','U','R','L',0};
#define INSTALLPROPERTY_MOREINFOURL WINELIB_NAME_AW(INSTALLPROPERTY_MOREINFOURL)
/* Source List Info */
#define INSTALLPROPERTY_LASTUSEDSOURCEA "LastUsedSource"
static const WCHAR INSTALLPROPERTY_LASTUSEDSOURCEW[] = {'L','a','s','t','U','s','e','d','S','o','u','r','c','e',0};
#define INSTALLPROPERTY_LASTUSEDSOURCE WINELIB_NAME_AW(INSTALLPROPERTY_LASTUSEDSOURCE)
Sync to Wine-20050725: Robert Shearman <rob@codeweavers.com> - In MsiLocateComponent pcchBuf can be NULL so don't try to dereference it. Alexandre Julliard <julliard@winehq.org> - Use the official names for the Unicode string constants. Aric Stewart <aric@codeweavers.com> - Implement MsiGetLanguage. - Relocate the msi file to prevent cd locking, corrected to properly not try to relocated #nnnn handles as files. - Use the SourceList functions to get the source path in ConfigureProductExW. - Handle installs off multiple volumes and properly pull the prompt string from the error table. - If MsiGetProperty(A/W) is called with a NULL for the value buffer but a value in the size for the value buffer, then Msi fills in the size of the value into the pointer for size. This is tested and confirmed with native MSI. - Bail out if the reg key is empty. This prevents us from writing garbage to the property table. - Properly resize the buffer based on ERROR_MORE_DATA. Also remember to free the allocated buffer. - Further testing shows that when CustomActionData needs to be blank it is an empty string not ' '. - Correct an error where I was not properly advancing a pointer. - Add source.c to start handling the various MsiSourceList apis used in v3 of MSI, and now internally. - Update files.c to use the MsiSourceList apis to make sure our SourceList keys in the registry are included and correct. - Use the strings defined in msi.h. - Use SOURCEDIR instead of PackagePath. Because the PackagePath may be local, while SOURCEDIR is more proper and will be a full directory. - InstallShield does a number of actions using DoAction before the Install starts so the PackageCode needs to be loaded on OpenPackage instead of the beginning of the install process. - When working toward install on demand support we need to reset all the constant values so that multiple install process do not get confused by leftover values from the previous install. - Fill and use the ProductCode part of the MSIPACKAGE structure. - Add the string constants located in msi.h and make use of them in files.c and source.c. - Keep track of what sequence we are in and register unique actions. This allows us to make sure actions and custom actions flagged to run only once, actually run only once. - Also clean up some of the numeric constants in custom.c using the defined values from msidefs.h. Mike McCormack <mike@codeweavers.com> - gcc 4.0 -Wpointer-sign fixes. - Display icons in buttons that have them. - Use LoadImage to load bitmaps and icons. - Set the initial focus on the control specified by Control_First in the Dialog table. - Move to the next mask edit field when the current one becomes full. - Make the tab order in msi dialogs right. - Don't crash when cancelling out of a modeless dialog. - Stop the install when cancelling from a modeless dialog. svn path=/trunk/; revision=17331
2005-08-12 17:07:28 +00:00
#define INSTALLPROPERTY_LASTUSEDTYPEA "LastUsedType"
static const WCHAR INSTALLPROPERTY_LASTUSEDTYPEW[] = {'L','a','s','t','U','s','e','d','T','y','p','e',0};
#define INSTALLPROPERTY_LASTUSEDTYPE WINELIB_NAME_AW(INSTALLPROPERTY_LASTUSEDTYPE)
#define INSTALLPROPERTY_MEDIAPACKAGEPATHA "MediaPackagePath"
static const WCHAR INSTALLPROPERTY_MEDIAPACKAGEPATHW[] = {'M','e','d','i','a','P','a','c','k','a','g','e','P','a','t','h',0};
#define INSTALLPROPERTY_MEDIAPACKAGEPATH WINELIB_NAME_AW(INSTALLPROPERTY_MEDIAPACKAGEPATH)
#define INSTALLPROPERTY_DISKPROMPTA "DiskPrompt"
static const WCHAR INSTALLPROPERTY_DISKPROMPTW[] = {'D','i','s','k','P','r','o','m','p','t',0};
#define INSTALLPROPERTY_DISKPROMPT WINELIB_NAME_AW(INSTALLPROPERTY_DISKPROMPT)
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
typedef INT (CALLBACK *INSTALLUI_HANDLERA)(LPVOID, UINT, LPCSTR);
typedef INT (CALLBACK *INSTALLUI_HANDLERW)(LPVOID, UINT, LPCWSTR);
typedef INT (CALLBACK *INSTALLUI_HANDLER_RECORD)(LPVOID, UINT, MSIHANDLE);
typedef INSTALLUI_HANDLER_RECORD* PINSTALLUI_HANDLER_RECORD;
UINT
WINAPI
MsiAdvertiseProductA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_opt_ LPCSTR,
_In_ LANGID);
UINT
WINAPI
MsiAdvertiseProductW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ LANGID);
#define MsiAdvertiseProduct WINELIB_NAME_AW(MsiAdvertiseProduct)
UINT
WINAPI
MsiAdvertiseProductExA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_opt_ LPCSTR,
_In_ LANGID,
_In_ DWORD,
_In_ DWORD);
UINT
WINAPI
MsiAdvertiseProductExW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ LANGID,
_In_ DWORD,
_In_ DWORD);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
#define MsiAdvertiseProductEx WINELIB_NAME_AW(MsiAdvertiseProductEx)
UINT WINAPI MsiInstallProductA(_In_ LPCSTR, _In_opt_ LPCSTR);
UINT WINAPI MsiInstallProductW(_In_ LPCWSTR, _In_opt_ LPCWSTR);
#define MsiInstallProduct WINELIB_NAME_AW(MsiInstallProduct)
UINT WINAPI MsiReinstallProductA(_In_ LPCSTR, _In_ DWORD);
UINT WINAPI MsiReinstallProductW(_In_ LPCWSTR, _In_ DWORD);
#define MsiReinstallProduct WINELIB_NAME_AW(MsiReinstallProduct)
UINT
WINAPI
MsiApplyPatchA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ INSTALLTYPE,
_In_opt_ LPCSTR);
UINT
WINAPI
MsiApplyPatchW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ INSTALLTYPE,
_In_opt_ LPCWSTR);
#define MsiApplyPatch WINELIB_NAME_AW(MsiApplyPatch)
UINT WINAPI MsiEnumComponentCostsA(MSIHANDLE, LPCSTR, DWORD, INSTALLSTATE, LPSTR, LPDWORD, LPINT, LPINT);
UINT WINAPI MsiEnumComponentCostsW(MSIHANDLE, LPCWSTR, DWORD, INSTALLSTATE, LPWSTR, LPDWORD, LPINT, LPINT);
#define MsiEnumComponentCosts WINELIB_NAME_AW(MsiEnumComponentCosts)
UINT
WINAPI
MsiEnumProductsA(
_In_ DWORD,
_Out_writes_(MAX_GUID_CHARS + 1) LPSTR);
UINT
WINAPI
MsiEnumProductsW(
_In_ DWORD,
_Out_writes_(MAX_GUID_CHARS + 1) LPWSTR);
#define MsiEnumProducts WINELIB_NAME_AW(MsiEnumProducts)
UINT
WINAPI
MsiEnumProductsExA(
_In_opt_ LPCSTR,
_In_opt_ LPCSTR,
_In_ DWORD,
_In_ DWORD,
_Out_writes_opt_(MAX_GUID_CHARS + 1) CHAR[39],
_Out_opt_ MSIINSTALLCONTEXT*,
_Out_writes_opt_(*pcchSid) LPSTR,
_Inout_opt_ LPDWORD pcchSid);
UINT
WINAPI
MsiEnumProductsExW(
_In_opt_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ DWORD,
_In_ DWORD,
_Out_writes_opt_(MAX_GUID_CHARS + 1) WCHAR[39],
_Out_opt_ MSIINSTALLCONTEXT*,
_Out_writes_opt_(*pcchSid) LPWSTR,
_Inout_opt_ LPDWORD pcchSid);
#define MsiEnumProductsEx WINELIB_NAME_AW(MsiEnumProductsEx)
UINT
WINAPI
MsiEnumFeaturesA(
_In_ LPCSTR,
_In_ DWORD,
_Out_writes_(MAX_FEATURE_CHARS + 1) LPSTR,
_Out_writes_opt_(MAX_FEATURE_CHARS + 1) LPSTR);
UINT
WINAPI
MsiEnumFeaturesW(
_In_ LPCWSTR,
_In_ DWORD,
_Out_writes_(MAX_FEATURE_CHARS + 1) LPWSTR,
_Out_writes_opt_(MAX_FEATURE_CHARS + 1) LPWSTR);
#define MsiEnumFeatures WINELIB_NAME_AW(MsiEnumFeatures)
UINT
WINAPI
MsiEnumComponentsA(
_In_ DWORD,
_Out_writes_(MAX_GUID_CHARS + 1) LPSTR);
UINT
WINAPI
MsiEnumComponentsW(
_In_ DWORD,
_Out_writes_(MAX_GUID_CHARS + 1) LPWSTR);
#define MsiEnumComponents WINELIB_NAME_AW(MsiEnumComponents)
UINT
WINAPI
MsiEnumComponentsExA(
_In_opt_ LPCSTR,
_In_ DWORD,
_In_ DWORD,
_Out_writes_opt_(MAX_GUID_CHARS + 1) CHAR[39],
_Out_opt_ MSIINSTALLCONTEXT *,
_Out_writes_opt_(*pcchSid) LPSTR,
_Inout_opt_ LPDWORD pcchSid);
UINT
WINAPI
MsiEnumComponentsExW(
_In_opt_ LPCWSTR,
_In_ DWORD,
_In_ DWORD,
_Out_writes_opt_(MAX_GUID_CHARS + 1) WCHAR[39],
_Out_opt_ MSIINSTALLCONTEXT *,
_Out_writes_opt_(*pcchSid) LPWSTR,
_Inout_opt_ LPDWORD pcchSid);
#define MsiEnumComponentsEx WINELIB_NAME_AW(MsiEnumComponentsEx)
UINT
WINAPI
MsiEnumClientsA(
_In_ LPCSTR,
_In_ DWORD,
_Out_writes_(MAX_GUID_CHARS + 1) LPSTR);
UINT
WINAPI
MsiEnumClientsW(
_In_ LPCWSTR,
_In_ DWORD,
_Out_writes_(MAX_GUID_CHARS + 1) LPWSTR);
#define MsiEnumClients WINELIB_NAME_AW(MsiEnumClients)
UINT WINAPI MsiEnumClientsExA(_In_ LPCSTR szComponent, _In_opt_ LPCSTR szUserSid, _In_ DWORD dwContext, _In_ DWORD dwProductIndex, _Out_opt_ CHAR szProductBuf[39], _Out_opt_ MSIINSTALLCONTEXT* pdwInstalledContext, _Out_opt_ LPSTR szSid, _Inout_opt_ LPDWORD pcchSid);
UINT WINAPI MsiEnumClientsExW(_In_ LPCWSTR szComponent, _In_opt_ LPCWSTR szUserSid, _In_ DWORD dwContext, _In_ DWORD dwProductIndex, _Out_opt_ WCHAR szProductBuf[39], _Out_opt_ MSIINSTALLCONTEXT* pdwInstalledContext, _Out_opt_ LPWSTR szSid, _Inout_opt_ LPDWORD pcchSid);
#define MsiEnumClientsEx WINELIB_NAME_AW(MsiEnumClientsEx)
UINT WINAPI MsiOpenPackageA(_In_ LPCSTR, _Out_ MSIHANDLE*);
UINT WINAPI MsiOpenPackageW(_In_ LPCWSTR, _Out_ MSIHANDLE*);
#define MsiOpenPackage WINELIB_NAME_AW(MsiOpenPackage)
UINT WINAPI MsiOpenPackageExA(_In_ LPCSTR, _In_ DWORD, _Out_ MSIHANDLE*);
UINT WINAPI MsiOpenPackageExW(_In_ LPCWSTR, _In_ DWORD, _Out_ MSIHANDLE*);
#define MsiOpenPackageEx WINELIB_NAME_AW(MsiOpenPackageEx)
UINT WINAPI MsiOpenProductA(_In_ LPCSTR, _Out_ MSIHANDLE*);
UINT WINAPI MsiOpenProductW(_In_ LPCWSTR, _Out_ MSIHANDLE*);
#define MsiOpenProduct WINELIB_NAME_AW(MsiOpenProduct)
UINT
WINAPI
MsiGetProductPropertyA(
_In_ MSIHANDLE,
_In_ LPCSTR,
_Out_writes_opt_(*pcchValueBuf) LPSTR,
_Inout_opt_ LPDWORD pcchValueBuf);
UINT
WINAPI
MsiGetProductPropertyW(
_In_ MSIHANDLE,
_In_ LPCWSTR,
_Out_writes_opt_(*pcchValueBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchValueBuf);
#define MsiGetProductProperty WINELIB_NAME_AW(MsiGetProductProperty)
UINT WINAPI MsiVerifyPackageA(_In_ LPCSTR);
UINT WINAPI MsiVerifyPackageW(_In_ LPCWSTR);
#define MsiVerifyPackage WINELIB_NAME_AW(MsiVerifyPackage)
UINT
WINAPI
MsiQueryComponentStateA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ LPCSTR,
_Out_opt_ INSTALLSTATE*);
UINT
WINAPI
MsiQueryComponentStateW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ LPCWSTR,
_Out_opt_ INSTALLSTATE*);
#define MsiQueryComponentState WINELIB_NAME_AW(MsiQueryComponentState)
INSTALLSTATE WINAPI MsiQueryProductStateA(_In_ LPCSTR);
INSTALLSTATE WINAPI MsiQueryProductStateW(_In_ LPCWSTR);
#define MsiQueryProductState WINELIB_NAME_AW(MsiQueryProductState)
UINT WINAPI MsiConfigureProductA(_In_ LPCSTR, _In_ int, _In_ INSTALLSTATE);
UINT WINAPI MsiConfigureProductW(_In_ LPCWSTR, _In_ int, _In_ INSTALLSTATE);
#define MsiConfigureProduct WINELIB_NAME_AW(MsiConfigureProduct)
UINT
WINAPI
MsiConfigureProductExA(
_In_ LPCSTR,
_In_ int,
_In_ INSTALLSTATE,
_In_opt_ LPCSTR);
UINT
WINAPI
MsiConfigureProductExW(
_In_ LPCWSTR,
_In_ int,
_In_ INSTALLSTATE,
_In_opt_ LPCWSTR);
#define MsiConfigureProductEx WINELIB_NAME_AW(MsiConfigureProductEx)
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
UINT
WINAPI
MsiConfigureFeatureA(
_In_ LPCSTR,
_In_ LPCSTR,
_In_ INSTALLSTATE);
UINT
WINAPI
MsiConfigureFeatureW(
_In_ LPCWSTR,
_In_ LPCWSTR,
_In_ INSTALLSTATE);
#define MsiConfigureFeature WINELIB_NAME_AW(MsiConfigureFeature)
Sync to Wine-0_9_1: Ivan Leo Puoti <ivanleo@gmail.com> - Fix some wrong prototypes. Thomas Weidenmueller <wine-patches@reactsoft.com> - Passing NULL as the last two parameters to ReadFile is illegal and actually causes a crash on windows. The attached patch fixes this. Aric Stewart <aric@codeweavers.com> - Force files to install if the REINSTALL property is set. Mike McCormack <mike@codeweavers.com> - Some installers don't call the CreateFolders action before the InstallFiles action as MSDN specifies, but it still seems to work, so make sure that we create component directories in the InstallFiles action anyway. - Create component folders in the CreateFolders action. - If an action fails, print out its name as well as the error code. Use %d for error codes so it's easy to match them up to something in winerror.h. - Rename load_dynamic_stringW to msi_dup_record_field to better describe what it does, and replace a few instances with MSI_RecordGetString to avoid allocating memory. - Tidy up the RegisterProduct action a little. - Create a stub function to apply a single table transform and call it where we need to apply transforms. - Enumerate the substorage transforms for any patches that are passed on the command line with PATCH=. Need to implement table_apply_transform() before this will do anything interesting. - Simplify register_progid() and remove a fixed length buffer. - Make enter and escape trigger the default and cancel buttons in dialogs. - Switch back to using IPicture to load images. LoadImage did the resizing for us, but doesn't handle jpeg files and requires us writing a temp file, whereas IPicture handles jpeg files and can load directly from a stream. - Remove unused package parameter of register_progid_base(). - Remove an incorrect comment and check for 0 being an invalid file handle. - Add missing semicolons that caused compile trouble on FreeBSD. - Extract file directly to their target location, bypassing the need to use temporary files and move files. - Put the UI update code for cabinet file into a separate function. - Translate INVALID_HANDLE_VALUE to zero for cabinet handles. - Fix a memory leak in the cabinet extracting code. - Fix passing of NULL pointers to MsiDecomposeDescriptor and add a test. - Fix parameter handling in MsiSetTargetPath, and add a test for it. - Deleted two buggy functions that incorrectly and inefficiently check whether a row already exists in a table, and replaced them with a call to an existing working function that does the same thing correctly. - Fix and test MsiGetProperty and MsiSetProperty. - Add a stub implementation of msi.MsiSetMode. - NULL and empty strings are the same in conditions. - Add a bunch of tests for MsiEvaluateCondition and make them pass. - Fix error handling in MsiEvaluateCondition. - Create the +msidb debug channel for msi database code. - Implement transforms. This still includes some debugging code which can be enabled by setting debug_transform to 1 in the relevant places. - Define NONAMELESSUNION and NONAMELESSSTRUCT for older compilers. - Remove some redundant null pointer checks. - Make sure to unregister all the classes that were registered when msi is unloaded, so we can register again cleanly. - Fix a memory leak. - Implement the RemoveFiles action. - Add a read-only implementation of the SelectionTree control. - Make sure we only CoUninitialize after successfully initializing. Fix the address of the returned IShellLinkDataList interface. - Use an enumeration for file states. - Handle MaskEdit masks containing dashes and other constant characters. - Stub implementation for MsiAdvertiseScriptA/W. - Add a stub for the AllocateRegistrySpace action. - Explicitly check for MSICONDITION_TRUE being returned from MsiEvaluateCondition. - Stub implementation for MsiGetFileHashA/W. - Define MSIDBOPEN_ constants using LPCWSTR when compiling Wine. - Improve MsiUseFeatureEx and MsiGetFeatureState a little, add some simple test cases. - Use msi_get_property_int() in a few more places. - Implement MsiGetFeatureUsageA and MsiUseFeature(Ex)A using their W versions. - Use "static const" rather than "const static" as gcc -W complains about the former. - Add an implementation for MsiGetShortcutTargetA/W. - Don't change the UI level during ExecuteAction. - Return an error in MsiGetComponentPathW if passed a null component. - Remove the unused 1st parameter of ACTION_VerifyComponentForAction. - Fix MsiGetPropertyA/W spec declarations. - Create an internal handle-free api for reading MSI database summary information. svn path=/trunk/; revision=19307
2005-11-17 20:49:37 +00:00
UINT
WINAPI
MsiGetProductCodeA(
_In_ LPCSTR,
_Out_writes_(MAX_GUID_CHARS + 1) LPSTR);
UINT
WINAPI
MsiGetProductCodeW(
_In_ LPCWSTR,
_Out_writes_(MAX_GUID_CHARS + 1) LPWSTR);
#define MsiGetProductCode WINELIB_NAME_AW(MsiGetProductCode)
UINT
WINAPI
MsiGetProductInfoA(
_In_ LPCSTR,
_In_ LPCSTR,
_Out_writes_opt_(*pcchValueBuf) LPSTR,
_Inout_opt_ LPDWORD pcchValueBuf);
UINT
WINAPI
MsiGetProductInfoW(
_In_ LPCWSTR,
_In_ LPCWSTR,
_Out_writes_opt_(*pcchValueBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchValueBuf);
#define MsiGetProductInfo WINELIB_NAME_AW(MsiGetProductInfo)
UINT
WINAPI
MsiGetProductInfoExA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ LPCSTR,
_Out_writes_opt_(*pcchValue) LPSTR,
_Inout_opt_ LPDWORD pcchValue);
UINT
WINAPI
MsiGetProductInfoExW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ LPCWSTR,
_Out_writes_opt_(*pcchValue) LPWSTR,
_Inout_opt_ LPDWORD pcchValue);
#define MsiGetProductInfoEx WINELIB_NAME_AW(MsiGetProductInfoEx)
UINT
WINAPI
MsiGetPatchInfoExA(
_In_ LPCSTR,
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ LPCSTR,
_Out_writes_opt_(*pcchValue) LPSTR,
_Inout_opt_ LPDWORD pcchValue);
UINT
WINAPI
MsiGetPatchInfoExW(
_In_ LPCWSTR,
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ LPCWSTR,
_Out_writes_opt_(*pcchValue) LPWSTR,
_Inout_opt_ LPDWORD pcchValue);
#define MsiGetPatchInfoEx WINELIB_NAME_AW(MsiGetPatchInfoEx)
UINT
WINAPI
MsiGetPatchInfoA(
_In_ LPCSTR,
_In_ LPCSTR,
_Out_writes_opt_(*pcchValueBuf) LPSTR,
_Inout_opt_ LPDWORD pcchValueBuf);
UINT
WINAPI
MsiGetPatchInfoW(
_In_ LPCWSTR,
_In_ LPCWSTR,
_Out_writes_opt_(*pcchValueBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchValueBuf);
#define MsiGetPatchInfo WINELIB_NAME_AW(MsiGetPatchInfo)
UINT WINAPI MsiEnableLogA(_In_ DWORD, _In_opt_ LPCSTR, _In_ DWORD);
UINT WINAPI MsiEnableLogW(_In_ DWORD, _In_opt_ LPCWSTR, _In_ DWORD);
#define MsiEnableLog WINELIB_NAME_AW(MsiEnableLog)
INSTALLUI_HANDLERA
WINAPI
MsiSetExternalUIA(
_In_opt_ INSTALLUI_HANDLERA,
_In_ DWORD,
_In_opt_ LPVOID);
INSTALLUI_HANDLERW
WINAPI
MsiSetExternalUIW(
_In_opt_ INSTALLUI_HANDLERW,
_In_ DWORD,
_In_opt_ LPVOID);
#define MsiSetExternalUI WINELIB_NAME_AW(MsiSetExternalUI)
INSTALLSTATE
WINAPI
MsiGetComponentPathA(
_In_ LPCSTR,
_In_ LPCSTR,
_Out_writes_opt_(*pcchBuf) LPSTR,
_Inout_opt_ LPDWORD pcchBuf);
INSTALLSTATE
WINAPI
MsiGetComponentPathW(
_In_ LPCWSTR,
_In_ LPCWSTR,
_Out_writes_opt_(*pcchBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchBuf);
#define MsiGetComponentPath WINELIB_NAME_AW(MsiGetComponentPath)
INSTALLSTATE WINAPI MsiQueryFeatureStateA(_In_ LPCSTR, _In_ LPCSTR);
INSTALLSTATE WINAPI MsiQueryFeatureStateW(_In_ LPCWSTR, _In_ LPCWSTR);
#define MsiQueryFeatureState WINELIB_NAME_AW(MsiQueryFeatureState)
UINT
WINAPI
MsiQueryFeatureStateExA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ LPCSTR,
_Out_opt_ INSTALLSTATE*);
UINT
WINAPI
MsiQueryFeatureStateExW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ LPCWSTR,
_Out_opt_ INSTALLSTATE*);
#define MsiQueryFeatureStateEx WINELIB_NAME_AW(MsiQueryFeatureStateEx)
UINT
WINAPI
MsiGetFeatureInfoA(
_In_ MSIHANDLE,
_In_ LPCSTR,
_Out_opt_ LPDWORD,
_Out_writes_opt_(*pcchTitleBuf) LPSTR,
_Inout_opt_ LPDWORD pcchTitleBuf,
_Out_writes_opt_(*pcchHelpBuf) LPSTR,
_Inout_opt_ LPDWORD pcchHelpBuf);
UINT
WINAPI
MsiGetFeatureInfoW(
_In_ MSIHANDLE,
_In_ LPCWSTR,
_Out_opt_ LPDWORD,
_Out_writes_opt_(*pcchTitleBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchTitleBuf,
_Out_writes_opt_(*pcchHelpBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchHelpBuf);
#define MsiGetFeatureInfo WINELIB_NAME_AW(MsiGetFeatureInfo)
UINT
WINAPI
MsiGetFeatureUsageA(
_In_ LPCSTR,
_In_ LPCSTR,
_Out_opt_ LPDWORD,
_Out_opt_ LPWORD);
UINT
WINAPI
MsiGetFeatureUsageW(
_In_ LPCWSTR,
_In_ LPCWSTR,
_Out_opt_ LPDWORD,
_Out_opt_ LPWORD);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
#define MsiGetFeatureUsage WINELIB_NAME_AW(MsiGetFeatureUsage)
UINT
WINAPI
MsiEnumRelatedProductsA(
_In_ LPCSTR,
_Reserved_ DWORD,
_In_ DWORD,
_Out_writes_(MAX_GUID_CHARS + 1) LPSTR);
UINT
WINAPI
MsiEnumRelatedProductsW(
_In_ LPCWSTR,
_Reserved_ DWORD,
_In_ DWORD,
_Out_writes_(MAX_GUID_CHARS + 1) LPWSTR);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
#define MsiEnumRelatedProducts WINELIB_NAME_AW(MsiEnumRelatedProducts)
UINT
WINAPI
MsiProvideAssemblyA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ DWORD,
_In_ DWORD,
_Out_writes_opt_(*pcchPathBuf) LPSTR,
_Inout_opt_ LPDWORD pcchPathBuf);
UINT
WINAPI
MsiProvideAssemblyW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ DWORD,
_In_ DWORD,
_Out_writes_opt_(*pcchPathBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchPathBuf);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
#define MsiProvideAssembly WINELIB_NAME_AW(MsiProvideAssembly)
UINT
WINAPI
MsiEnumComponentQualifiersA(
_In_ LPCSTR,
_In_ DWORD,
_Out_writes_(*pcchQualifierBuf) LPSTR,
_Inout_ LPDWORD pcchQualifierBuf,
_Out_writes_opt_(*pcchApplicationDataBuf) LPSTR,
_Inout_opt_ LPDWORD pcchApplicationDataBuf);
UINT
WINAPI
MsiEnumComponentQualifiersW(
_In_ LPCWSTR,
_In_ DWORD,
_Out_writes_(*pcchQualifierBuf) LPWSTR,
_Inout_ LPDWORD pcchQualifierBuf,
_Out_writes_opt_(*pcchApplicationDataBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchApplicationDataBuf);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
#define MsiEnumComponentQualifiers WINELIB_NAME_AW(MsiEnumComponentQualifiers)
UINT
WINAPI
MsiGetFileVersionA(
_In_ LPCSTR,
_Out_writes_opt_(*pcchVersionBuf) LPSTR,
_Inout_opt_ LPDWORD pcchVersionBuf,
_Out_writes_opt_(*pcchLangBuf) LPSTR,
_Inout_opt_ LPDWORD pcchLangBuf);
UINT
WINAPI
MsiGetFileVersionW(
_In_ LPCWSTR,
_Out_writes_opt_(*pcchVersionBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchVersionBuf,
_Out_writes_opt_(*pcchLangBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchLangBuf);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
#define MsiGetFileVersion WINELIB_NAME_AW(MsiGetFileVersion)
UINT WINAPI MsiMessageBoxA(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD);
UINT WINAPI MsiMessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD);
#define MsiMessageBox WINELIB_NAME_AW(MsiMessageBox)
UINT
WINAPI
MsiProvideQualifiedComponentExA(
_In_ LPCSTR,
_In_ LPCSTR,
_In_ DWORD,
_In_opt_ LPCSTR,
_Reserved_ DWORD,
_Reserved_ DWORD,
_Out_writes_opt_(*pcchPathBuf) LPSTR,
_Inout_opt_ LPDWORD pcchPathBuf);
UINT
WINAPI
MsiProvideQualifiedComponentExW(
_In_ LPCWSTR,
_In_ LPCWSTR,
_In_ DWORD,
_In_opt_ LPCWSTR,
_Reserved_ DWORD,
_Reserved_ DWORD,
_Out_writes_opt_(*pcchPathBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchPathBuf);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
#define MsiProvideQualifiedComponentEx WINELIB_NAME_AW(MsiProvideQualifiedComponentEx)
UINT
WINAPI
MsiProvideQualifiedComponentA(
_In_ LPCSTR,
_In_ LPCSTR,
_In_ DWORD,
_Out_writes_opt_(*pcchPathBuf) LPSTR,
_Inout_opt_ LPDWORD pcchPathBuf);
UINT
WINAPI
MsiProvideQualifiedComponentW(
_In_ LPCWSTR,
_In_ LPCWSTR,
_In_ DWORD,
_Out_writes_opt_(*pcchPathBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchPathBuf);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
#define MsiProvideQualifiedComponent WINELIB_NAME_AW(MsiProvideQualifiedComponent)
USERINFOSTATE
WINAPI
MsiGetUserInfoA(
_In_ LPCSTR,
_Out_writes_opt_(*pcchUserNameBuf) LPSTR,
_Inout_opt_ LPDWORD pcchUserNameBuf,
_Out_writes_opt_(*pcchOrgNameBuf) LPSTR,
_Inout_opt_ LPDWORD pcchOrgNameBuf,
_Out_writes_opt_(*pcchSerialBuf) LPSTR,
_Inout_opt_ LPDWORD pcchSerialBuf);
USERINFOSTATE
WINAPI
MsiGetUserInfoW(
_In_ LPCWSTR,
_Out_writes_opt_(*pcchUserNameBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchUserNameBuf,
_Out_writes_opt_(*pcchOrgNameBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchOrgNameBuf,
_Out_writes_opt_(*pcchSerialBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchSerialBuf);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
#define MsiGetUserInfo WINELIB_NAME_AW(MsiGetUserInfo)
UINT WINAPI MsiProvidedComponentA(LPCSTR, LPCSTR, LPCSTR, DWORD, LPSTR, LPDWORD);
UINT WINAPI MsiProvideComponentW(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPDWORD);
#define MsiProvideComponent WINELIB_NAME_AW(MsiProvideComponent)
UINT WINAPI MsiCollectUserInfoA(_In_ LPCSTR);
UINT WINAPI MsiCollectUserInfoW(_In_ LPCWSTR);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
#define MsiCollectUserInfo WINELIB_NAME_AW(MsiCollectUserInfo)
UINT WINAPI MsiReinstallFeatureA(_In_ LPCSTR, _In_ LPCSTR, _In_ DWORD);
UINT WINAPI MsiReinstallFeatureW(_In_ LPCWSTR, _In_ LPCWSTR, _In_ DWORD);
Sync to Wine-20050628: Mike McCormack <mike@codeweavers.com> - Repaint the area behind the "transparent" text control when it changes. - Implement transparency in the text control. - Make the MSI icon control work. - Make tabs work in msi dialogs. - Added support for the MSI MaskEdit control. - Use a richedit control for license text. - Fix radio button groups. Don't add the WS_GROUP style to every window. - Use standard lists in the event subscription code. - Take the dialog frame into account when calculating the dialog size. - Use MSI_QueryGetRecord in one more place. - Create a helper function to fetch a single record from a query. - More -Wmissing-declarations and -Wwrite-strings warning fixes. - Get rid of some redundant parser types. - Use the new helper function MSI_QueryGetRecord. - Use MSI_RecordGetString in more actions. - Use MSI_RecordGetString where possible. - Fixes for -Wmissing-declarations and -Wwrite-strings warnings. - Remove some unused code. - Add and correct some function declarations. - Improve number parsing and avoid unicode.h. - avoid unicode.h - add a missing function prototype - Create a stub implementation for MsiViewGetError. - Remove more types from the parser. - Test and fix the size of stream fields in a record. - Clean up headers and make some functions static. Marcus Meissner <meissner@suse.de> - Use a simpler expression for the "RichEdit20W" string to workaround compiler bug. - Remove cszbs from msi/action.h. Aric Stewart <aric@codeweavers.com> Mike McCormack <mike@codeweavers.com> - Allow dialog controls to subscribe to installer events. - Fix handling of checkbox properties. - Implement dialog events and hook up the dialog code. Aric Stewart <aric@codeweavers.com> - Break out all the file related actions and helper functions into files.c - Break out all the top level apis into install.c. - Break out all the class registration actions into classes.c. This includes RegisterClassInfo, RegisterProgIds, RegisterExtensions and RegisterMIMETypes. - Break out all the helper functions into helpers.c. - Added module upgrade.c and implemented FindRelatedProducts. - A long overdue fix to MSI_SetTargetPath. This should fix an error with some installers that where unable to change the target path. - Add functions to add the User UpgradeCodes. - A simple cleanup to only track the temp file if we need to have it laying around because the action is going on asynchronously. Otherwise clean up the temp file as the action finishes. - Introduce really basic scripting of actions. This is primarily to get the order of execution of the action correct since some custom actions can be scripted and others are run during the script building phase. - Perform ExecuteAction at UILevel 2. - Rework CreateShortcuts to use MSI_IterateRecords. - Properly handle -1 as a registry key root. - Rework SelfRegModules to use MSI_IterateRecords. - Rework component, feature and file loading to use MSI_IterateRecords. - Rework RegisterFonts to use MSI_IterateRecords. - Rework WriteIniValues to use MSI_IterateRecords. - Rework PublishProduct to use MSI_IterateRecords. - Rework RegisterTypeLibraries to use MSI_IterateR - Rework LaunchConditions to use MSI_IterateRecord - Rework CostFinalize to use MSI_IterateRecords. - Rework WriteRegistryValues to use MSI_IterateRecords. - Rework CreateFolders to use MSI_IterateRecords. - Use MSI_IterateRecords for processing actions. Some whitespace cleanup and replace a comment block I did not want to remove. - Flesh out the remaining keys in RegisterProduct. - Extending upon Mike McCormack's cleanup to use MSI_RecordGetString. - Register the Product Version also. Also help plug some memory leaks pointed out by Mike McCormack. - Avoid a loop where a parent's parent refers to itself as its parent. - Added module upgrade.c and implemented FindRelatedProducts. - Set the Preselected property if appropriate (relevant to MigrateFeatureStates when implemented). - Write out Product Language and Product Icon to the registry. - Write out UpgradeCodes to the registry to allow for future upgrades. - Don't get caught in loops on parent progids. - Since multiple progids can refer to 1 class we need to check if that class is isntalled instead of just relying on having it set the InstallMe variable. - Add install_on_demand for Extension servers also. currently defaulting to TRUE. - Extension need to have 1 verb to mark the given progid to be installed. - Do not loop if a ProgId's Parent Index it itself. - Add a VersionIndIndex for tracking version independent fields for the ProgIds properly. - Print a message for skipped actions in ProcessExecSequence like in the UISequence. - Do not change a features state to Advertise if it explicitly disallows it. - For typelibs index 1 do not add \\1 to the path. This cleans up registry diffs with native MSI. - Register the FileType and correct short vs long path problems with InprocServer32. Also add install_on_demand boolean for future expansion. - First pass at writing out CurVer keys for ProgIds. Also print a message for the actions we skip. Lines up with native MSI output logs for ease of comparison. - A big rewrite of the whole RegisterClass, RegisterProgId, RegisterExtension and RegisterMIME actions. We now handle verbs properly, handle dependancies and such properly and keep track of what we need to register and what we do not properly. - Allow control events to return codes to halt the processing of event. Needed for the SetTargetPath Event. - Fix situations where TARGETDIR is set to a non \ terminated path. Fixes a few installers. - Redo how we extract files from a cabinet in order to dramatically improve performance, especially if picking and choosing files out of the cabinet. - Duplicate files should not fail if unable to get Destination Directory. - Use MSI_IterateRecords for DuplicateFiles. - Add UI messages to FindRelatedProducts. - Reduce unneeded includes. - A "1" is returned not a 1 for AssignmentType. Also as a bit more to the FIXME message. - Add Language to the values we can query with MsiGetProductInfo. - Correct a crash if the length buffer is NULL. - Locate where a buffer size is not being set and correctly handle the buffer size conversion from W to A (with help from Robert Shearman). - Make sure the TRACE statements do not spew garbage by using debugstr_wn. - Restrict deformating of nested index keys [[1]]. - Introduce the beginning of group deformating {}. - Implement the [!file] format to produce the short filename. Stefan Huehner <stefan@huehner.org> - Fix more -Wstrict-prototypes warnings. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Dmitry Timoshkov <dmitry@codeweavers.com> - Make more of the OLE interface vtables const. svn path=/trunk/; revision=17034
2005-08-03 22:12:15 +00:00
#define MsiReinstallFeature WINELIB_NAME_AW(MsiReinstallFeature)
UINT
WINAPI
MsiGetShortcutTargetA(
_In_ LPCSTR,
_Out_writes_opt_(MAX_GUID_CHARS + 1) LPSTR,
_Out_writes_opt_(MAX_FEATURE_CHARS + 1) LPSTR,
_Out_writes_opt_(MAX_GUID_CHARS + 1) LPSTR);
UINT
WINAPI
MsiGetShortcutTargetW(
_In_ LPCWSTR,
_Out_writes_opt_(MAX_GUID_CHARS + 1) LPWSTR,
_Out_writes_opt_(MAX_FEATURE_CHARS + 1) LPWSTR,
_Out_writes_opt_(MAX_GUID_CHARS + 1) LPWSTR);
Sync to Wine-20050628: Mike McCormack <mike@codeweavers.com> - Repaint the area behind the "transparent" text control when it changes. - Implement transparency in the text control. - Make the MSI icon control work. - Make tabs work in msi dialogs. - Added support for the MSI MaskEdit control. - Use a richedit control for license text. - Fix radio button groups. Don't add the WS_GROUP style to every window. - Use standard lists in the event subscription code. - Take the dialog frame into account when calculating the dialog size. - Use MSI_QueryGetRecord in one more place. - Create a helper function to fetch a single record from a query. - More -Wmissing-declarations and -Wwrite-strings warning fixes. - Get rid of some redundant parser types. - Use the new helper function MSI_QueryGetRecord. - Use MSI_RecordGetString in more actions. - Use MSI_RecordGetString where possible. - Fixes for -Wmissing-declarations and -Wwrite-strings warnings. - Remove some unused code. - Add and correct some function declarations. - Improve number parsing and avoid unicode.h. - avoid unicode.h - add a missing function prototype - Create a stub implementation for MsiViewGetError. - Remove more types from the parser. - Test and fix the size of stream fields in a record. - Clean up headers and make some functions static. Marcus Meissner <meissner@suse.de> - Use a simpler expression for the "RichEdit20W" string to workaround compiler bug. - Remove cszbs from msi/action.h. Aric Stewart <aric@codeweavers.com> Mike McCormack <mike@codeweavers.com> - Allow dialog controls to subscribe to installer events. - Fix handling of checkbox properties. - Implement dialog events and hook up the dialog code. Aric Stewart <aric@codeweavers.com> - Break out all the file related actions and helper functions into files.c - Break out all the top level apis into install.c. - Break out all the class registration actions into classes.c. This includes RegisterClassInfo, RegisterProgIds, RegisterExtensions and RegisterMIMETypes. - Break out all the helper functions into helpers.c. - Added module upgrade.c and implemented FindRelatedProducts. - A long overdue fix to MSI_SetTargetPath. This should fix an error with some installers that where unable to change the target path. - Add functions to add the User UpgradeCodes. - A simple cleanup to only track the temp file if we need to have it laying around because the action is going on asynchronously. Otherwise clean up the temp file as the action finishes. - Introduce really basic scripting of actions. This is primarily to get the order of execution of the action correct since some custom actions can be scripted and others are run during the script building phase. - Perform ExecuteAction at UILevel 2. - Rework CreateShortcuts to use MSI_IterateRecords. - Properly handle -1 as a registry key root. - Rework SelfRegModules to use MSI_IterateRecords. - Rework component, feature and file loading to use MSI_IterateRecords. - Rework RegisterFonts to use MSI_IterateRecords. - Rework WriteIniValues to use MSI_IterateRecords. - Rework PublishProduct to use MSI_IterateRecords. - Rework RegisterTypeLibraries to use MSI_IterateR - Rework LaunchConditions to use MSI_IterateRecord - Rework CostFinalize to use MSI_IterateRecords. - Rework WriteRegistryValues to use MSI_IterateRecords. - Rework CreateFolders to use MSI_IterateRecords. - Use MSI_IterateRecords for processing actions. Some whitespace cleanup and replace a comment block I did not want to remove. - Flesh out the remaining keys in RegisterProduct. - Extending upon Mike McCormack's cleanup to use MSI_RecordGetString. - Register the Product Version also. Also help plug some memory leaks pointed out by Mike McCormack. - Avoid a loop where a parent's parent refers to itself as its parent. - Added module upgrade.c and implemented FindRelatedProducts. - Set the Preselected property if appropriate (relevant to MigrateFeatureStates when implemented). - Write out Product Language and Product Icon to the registry. - Write out UpgradeCodes to the registry to allow for future upgrades. - Don't get caught in loops on parent progids. - Since multiple progids can refer to 1 class we need to check if that class is isntalled instead of just relying on having it set the InstallMe variable. - Add install_on_demand for Extension servers also. currently defaulting to TRUE. - Extension need to have 1 verb to mark the given progid to be installed. - Do not loop if a ProgId's Parent Index it itself. - Add a VersionIndIndex for tracking version independent fields for the ProgIds properly. - Print a message for skipped actions in ProcessExecSequence like in the UISequence. - Do not change a features state to Advertise if it explicitly disallows it. - For typelibs index 1 do not add \\1 to the path. This cleans up registry diffs with native MSI. - Register the FileType and correct short vs long path problems with InprocServer32. Also add install_on_demand boolean for future expansion. - First pass at writing out CurVer keys for ProgIds. Also print a message for the actions we skip. Lines up with native MSI output logs for ease of comparison. - A big rewrite of the whole RegisterClass, RegisterProgId, RegisterExtension and RegisterMIME actions. We now handle verbs properly, handle dependancies and such properly and keep track of what we need to register and what we do not properly. - Allow control events to return codes to halt the processing of event. Needed for the SetTargetPath Event. - Fix situations where TARGETDIR is set to a non \ terminated path. Fixes a few installers. - Redo how we extract files from a cabinet in order to dramatically improve performance, especially if picking and choosing files out of the cabinet. - Duplicate files should not fail if unable to get Destination Directory. - Use MSI_IterateRecords for DuplicateFiles. - Add UI messages to FindRelatedProducts. - Reduce unneeded includes. - A "1" is returned not a 1 for AssignmentType. Also as a bit more to the FIXME message. - Add Language to the values we can query with MsiGetProductInfo. - Correct a crash if the length buffer is NULL. - Locate where a buffer size is not being set and correctly handle the buffer size conversion from W to A (with help from Robert Shearman). - Make sure the TRACE statements do not spew garbage by using debugstr_wn. - Restrict deformating of nested index keys [[1]]. - Introduce the beginning of group deformating {}. - Implement the [!file] format to produce the short filename. Stefan Huehner <stefan@huehner.org> - Fix more -Wstrict-prototypes warnings. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Dmitry Timoshkov <dmitry@codeweavers.com> - Make more of the OLE interface vtables const. svn path=/trunk/; revision=17034
2005-08-03 22:12:15 +00:00
#define MsiGetShortcutTarget WINELIB_NAME_AW(MsiGetShortcutTarget)
INSTALLSTATE WINAPI MsiUseFeatureW(_In_ LPCWSTR, _In_ LPCWSTR);
INSTALLSTATE WINAPI MsiUseFeatureA(_In_ LPCSTR, _In_ LPCSTR);
Sync to Wine-20050628: Mike McCormack <mike@codeweavers.com> - Repaint the area behind the "transparent" text control when it changes. - Implement transparency in the text control. - Make the MSI icon control work. - Make tabs work in msi dialogs. - Added support for the MSI MaskEdit control. - Use a richedit control for license text. - Fix radio button groups. Don't add the WS_GROUP style to every window. - Use standard lists in the event subscription code. - Take the dialog frame into account when calculating the dialog size. - Use MSI_QueryGetRecord in one more place. - Create a helper function to fetch a single record from a query. - More -Wmissing-declarations and -Wwrite-strings warning fixes. - Get rid of some redundant parser types. - Use the new helper function MSI_QueryGetRecord. - Use MSI_RecordGetString in more actions. - Use MSI_RecordGetString where possible. - Fixes for -Wmissing-declarations and -Wwrite-strings warnings. - Remove some unused code. - Add and correct some function declarations. - Improve number parsing and avoid unicode.h. - avoid unicode.h - add a missing function prototype - Create a stub implementation for MsiViewGetError. - Remove more types from the parser. - Test and fix the size of stream fields in a record. - Clean up headers and make some functions static. Marcus Meissner <meissner@suse.de> - Use a simpler expression for the "RichEdit20W" string to workaround compiler bug. - Remove cszbs from msi/action.h. Aric Stewart <aric@codeweavers.com> Mike McCormack <mike@codeweavers.com> - Allow dialog controls to subscribe to installer events. - Fix handling of checkbox properties. - Implement dialog events and hook up the dialog code. Aric Stewart <aric@codeweavers.com> - Break out all the file related actions and helper functions into files.c - Break out all the top level apis into install.c. - Break out all the class registration actions into classes.c. This includes RegisterClassInfo, RegisterProgIds, RegisterExtensions and RegisterMIMETypes. - Break out all the helper functions into helpers.c. - Added module upgrade.c and implemented FindRelatedProducts. - A long overdue fix to MSI_SetTargetPath. This should fix an error with some installers that where unable to change the target path. - Add functions to add the User UpgradeCodes. - A simple cleanup to only track the temp file if we need to have it laying around because the action is going on asynchronously. Otherwise clean up the temp file as the action finishes. - Introduce really basic scripting of actions. This is primarily to get the order of execution of the action correct since some custom actions can be scripted and others are run during the script building phase. - Perform ExecuteAction at UILevel 2. - Rework CreateShortcuts to use MSI_IterateRecords. - Properly handle -1 as a registry key root. - Rework SelfRegModules to use MSI_IterateRecords. - Rework component, feature and file loading to use MSI_IterateRecords. - Rework RegisterFonts to use MSI_IterateRecords. - Rework WriteIniValues to use MSI_IterateRecords. - Rework PublishProduct to use MSI_IterateRecords. - Rework RegisterTypeLibraries to use MSI_IterateR - Rework LaunchConditions to use MSI_IterateRecord - Rework CostFinalize to use MSI_IterateRecords. - Rework WriteRegistryValues to use MSI_IterateRecords. - Rework CreateFolders to use MSI_IterateRecords. - Use MSI_IterateRecords for processing actions. Some whitespace cleanup and replace a comment block I did not want to remove. - Flesh out the remaining keys in RegisterProduct. - Extending upon Mike McCormack's cleanup to use MSI_RecordGetString. - Register the Product Version also. Also help plug some memory leaks pointed out by Mike McCormack. - Avoid a loop where a parent's parent refers to itself as its parent. - Added module upgrade.c and implemented FindRelatedProducts. - Set the Preselected property if appropriate (relevant to MigrateFeatureStates when implemented). - Write out Product Language and Product Icon to the registry. - Write out UpgradeCodes to the registry to allow for future upgrades. - Don't get caught in loops on parent progids. - Since multiple progids can refer to 1 class we need to check if that class is isntalled instead of just relying on having it set the InstallMe variable. - Add install_on_demand for Extension servers also. currently defaulting to TRUE. - Extension need to have 1 verb to mark the given progid to be installed. - Do not loop if a ProgId's Parent Index it itself. - Add a VersionIndIndex for tracking version independent fields for the ProgIds properly. - Print a message for skipped actions in ProcessExecSequence like in the UISequence. - Do not change a features state to Advertise if it explicitly disallows it. - For typelibs index 1 do not add \\1 to the path. This cleans up registry diffs with native MSI. - Register the FileType and correct short vs long path problems with InprocServer32. Also add install_on_demand boolean for future expansion. - First pass at writing out CurVer keys for ProgIds. Also print a message for the actions we skip. Lines up with native MSI output logs for ease of comparison. - A big rewrite of the whole RegisterClass, RegisterProgId, RegisterExtension and RegisterMIME actions. We now handle verbs properly, handle dependancies and such properly and keep track of what we need to register and what we do not properly. - Allow control events to return codes to halt the processing of event. Needed for the SetTargetPath Event. - Fix situations where TARGETDIR is set to a non \ terminated path. Fixes a few installers. - Redo how we extract files from a cabinet in order to dramatically improve performance, especially if picking and choosing files out of the cabinet. - Duplicate files should not fail if unable to get Destination Directory. - Use MSI_IterateRecords for DuplicateFiles. - Add UI messages to FindRelatedProducts. - Reduce unneeded includes. - A "1" is returned not a 1 for AssignmentType. Also as a bit more to the FIXME message. - Add Language to the values we can query with MsiGetProductInfo. - Correct a crash if the length buffer is NULL. - Locate where a buffer size is not being set and correctly handle the buffer size conversion from W to A (with help from Robert Shearman). - Make sure the TRACE statements do not spew garbage by using debugstr_wn. - Restrict deformating of nested index keys [[1]]. - Introduce the beginning of group deformating {}. - Implement the [!file] format to produce the short filename. Stefan Huehner <stefan@huehner.org> - Fix more -Wstrict-prototypes warnings. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Dmitry Timoshkov <dmitry@codeweavers.com> - Make more of the OLE interface vtables const. svn path=/trunk/; revision=17034
2005-08-03 22:12:15 +00:00
#define MsiUseFeature WINELIB_NAME_AW(MsiUseFeature)
INSTALLSTATE
WINAPI
MsiUseFeatureExW(
_In_ LPCWSTR,
_In_ LPCWSTR,
_In_ DWORD,
_Reserved_ DWORD);
INSTALLSTATE
WINAPI
MsiUseFeatureExA(
_In_ LPCSTR,
_In_ LPCSTR,
_In_ DWORD,
_Reserved_ DWORD);
Sync to Wine-20050628: Mike McCormack <mike@codeweavers.com> - Repaint the area behind the "transparent" text control when it changes. - Implement transparency in the text control. - Make the MSI icon control work. - Make tabs work in msi dialogs. - Added support for the MSI MaskEdit control. - Use a richedit control for license text. - Fix radio button groups. Don't add the WS_GROUP style to every window. - Use standard lists in the event subscription code. - Take the dialog frame into account when calculating the dialog size. - Use MSI_QueryGetRecord in one more place. - Create a helper function to fetch a single record from a query. - More -Wmissing-declarations and -Wwrite-strings warning fixes. - Get rid of some redundant parser types. - Use the new helper function MSI_QueryGetRecord. - Use MSI_RecordGetString in more actions. - Use MSI_RecordGetString where possible. - Fixes for -Wmissing-declarations and -Wwrite-strings warnings. - Remove some unused code. - Add and correct some function declarations. - Improve number parsing and avoid unicode.h. - avoid unicode.h - add a missing function prototype - Create a stub implementation for MsiViewGetError. - Remove more types from the parser. - Test and fix the size of stream fields in a record. - Clean up headers and make some functions static. Marcus Meissner <meissner@suse.de> - Use a simpler expression for the "RichEdit20W" string to workaround compiler bug. - Remove cszbs from msi/action.h. Aric Stewart <aric@codeweavers.com> Mike McCormack <mike@codeweavers.com> - Allow dialog controls to subscribe to installer events. - Fix handling of checkbox properties. - Implement dialog events and hook up the dialog code. Aric Stewart <aric@codeweavers.com> - Break out all the file related actions and helper functions into files.c - Break out all the top level apis into install.c. - Break out all the class registration actions into classes.c. This includes RegisterClassInfo, RegisterProgIds, RegisterExtensions and RegisterMIMETypes. - Break out all the helper functions into helpers.c. - Added module upgrade.c and implemented FindRelatedProducts. - A long overdue fix to MSI_SetTargetPath. This should fix an error with some installers that where unable to change the target path. - Add functions to add the User UpgradeCodes. - A simple cleanup to only track the temp file if we need to have it laying around because the action is going on asynchronously. Otherwise clean up the temp file as the action finishes. - Introduce really basic scripting of actions. This is primarily to get the order of execution of the action correct since some custom actions can be scripted and others are run during the script building phase. - Perform ExecuteAction at UILevel 2. - Rework CreateShortcuts to use MSI_IterateRecords. - Properly handle -1 as a registry key root. - Rework SelfRegModules to use MSI_IterateRecords. - Rework component, feature and file loading to use MSI_IterateRecords. - Rework RegisterFonts to use MSI_IterateRecords. - Rework WriteIniValues to use MSI_IterateRecords. - Rework PublishProduct to use MSI_IterateRecords. - Rework RegisterTypeLibraries to use MSI_IterateR - Rework LaunchConditions to use MSI_IterateRecord - Rework CostFinalize to use MSI_IterateRecords. - Rework WriteRegistryValues to use MSI_IterateRecords. - Rework CreateFolders to use MSI_IterateRecords. - Use MSI_IterateRecords for processing actions. Some whitespace cleanup and replace a comment block I did not want to remove. - Flesh out the remaining keys in RegisterProduct. - Extending upon Mike McCormack's cleanup to use MSI_RecordGetString. - Register the Product Version also. Also help plug some memory leaks pointed out by Mike McCormack. - Avoid a loop where a parent's parent refers to itself as its parent. - Added module upgrade.c and implemented FindRelatedProducts. - Set the Preselected property if appropriate (relevant to MigrateFeatureStates when implemented). - Write out Product Language and Product Icon to the registry. - Write out UpgradeCodes to the registry to allow for future upgrades. - Don't get caught in loops on parent progids. - Since multiple progids can refer to 1 class we need to check if that class is isntalled instead of just relying on having it set the InstallMe variable. - Add install_on_demand for Extension servers also. currently defaulting to TRUE. - Extension need to have 1 verb to mark the given progid to be installed. - Do not loop if a ProgId's Parent Index it itself. - Add a VersionIndIndex for tracking version independent fields for the ProgIds properly. - Print a message for skipped actions in ProcessExecSequence like in the UISequence. - Do not change a features state to Advertise if it explicitly disallows it. - For typelibs index 1 do not add \\1 to the path. This cleans up registry diffs with native MSI. - Register the FileType and correct short vs long path problems with InprocServer32. Also add install_on_demand boolean for future expansion. - First pass at writing out CurVer keys for ProgIds. Also print a message for the actions we skip. Lines up with native MSI output logs for ease of comparison. - A big rewrite of the whole RegisterClass, RegisterProgId, RegisterExtension and RegisterMIME actions. We now handle verbs properly, handle dependancies and such properly and keep track of what we need to register and what we do not properly. - Allow control events to return codes to halt the processing of event. Needed for the SetTargetPath Event. - Fix situations where TARGETDIR is set to a non \ terminated path. Fixes a few installers. - Redo how we extract files from a cabinet in order to dramatically improve performance, especially if picking and choosing files out of the cabinet. - Duplicate files should not fail if unable to get Destination Directory. - Use MSI_IterateRecords for DuplicateFiles. - Add UI messages to FindRelatedProducts. - Reduce unneeded includes. - A "1" is returned not a 1 for AssignmentType. Also as a bit more to the FIXME message. - Add Language to the values we can query with MsiGetProductInfo. - Correct a crash if the length buffer is NULL. - Locate where a buffer size is not being set and correctly handle the buffer size conversion from W to A (with help from Robert Shearman). - Make sure the TRACE statements do not spew garbage by using debugstr_wn. - Restrict deformating of nested index keys [[1]]. - Introduce the beginning of group deformating {}. - Implement the [!file] format to produce the short filename. Stefan Huehner <stefan@huehner.org> - Fix more -Wstrict-prototypes warnings. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Dmitry Timoshkov <dmitry@codeweavers.com> - Make more of the OLE interface vtables const. svn path=/trunk/; revision=17034
2005-08-03 22:12:15 +00:00
#define MsiUseFeatureEx WINELIB_NAME_AW(MsiUseFeatureEx)
HRESULT
WINAPI
MsiGetFileSignatureInformationA(
_In_ LPCSTR,
_In_ DWORD,
_Outptr_ PCCERT_CONTEXT*,
_Out_writes_bytes_opt_(*pcbHashData) LPBYTE,
_Inout_opt_ LPDWORD pcbHashData);
HRESULT
WINAPI
MsiGetFileSignatureInformationW(
_In_ LPCWSTR,
_In_ DWORD,
_Outptr_ PCCERT_CONTEXT*,
_Out_writes_bytes_opt_(*pcbHashData) LPBYTE,
_Inout_opt_ LPDWORD pcbHashData);
Sync to Wine-20050628: Mike McCormack <mike@codeweavers.com> - Repaint the area behind the "transparent" text control when it changes. - Implement transparency in the text control. - Make the MSI icon control work. - Make tabs work in msi dialogs. - Added support for the MSI MaskEdit control. - Use a richedit control for license text. - Fix radio button groups. Don't add the WS_GROUP style to every window. - Use standard lists in the event subscription code. - Take the dialog frame into account when calculating the dialog size. - Use MSI_QueryGetRecord in one more place. - Create a helper function to fetch a single record from a query. - More -Wmissing-declarations and -Wwrite-strings warning fixes. - Get rid of some redundant parser types. - Use the new helper function MSI_QueryGetRecord. - Use MSI_RecordGetString in more actions. - Use MSI_RecordGetString where possible. - Fixes for -Wmissing-declarations and -Wwrite-strings warnings. - Remove some unused code. - Add and correct some function declarations. - Improve number parsing and avoid unicode.h. - avoid unicode.h - add a missing function prototype - Create a stub implementation for MsiViewGetError. - Remove more types from the parser. - Test and fix the size of stream fields in a record. - Clean up headers and make some functions static. Marcus Meissner <meissner@suse.de> - Use a simpler expression for the "RichEdit20W" string to workaround compiler bug. - Remove cszbs from msi/action.h. Aric Stewart <aric@codeweavers.com> Mike McCormack <mike@codeweavers.com> - Allow dialog controls to subscribe to installer events. - Fix handling of checkbox properties. - Implement dialog events and hook up the dialog code. Aric Stewart <aric@codeweavers.com> - Break out all the file related actions and helper functions into files.c - Break out all the top level apis into install.c. - Break out all the class registration actions into classes.c. This includes RegisterClassInfo, RegisterProgIds, RegisterExtensions and RegisterMIMETypes. - Break out all the helper functions into helpers.c. - Added module upgrade.c and implemented FindRelatedProducts. - A long overdue fix to MSI_SetTargetPath. This should fix an error with some installers that where unable to change the target path. - Add functions to add the User UpgradeCodes. - A simple cleanup to only track the temp file if we need to have it laying around because the action is going on asynchronously. Otherwise clean up the temp file as the action finishes. - Introduce really basic scripting of actions. This is primarily to get the order of execution of the action correct since some custom actions can be scripted and others are run during the script building phase. - Perform ExecuteAction at UILevel 2. - Rework CreateShortcuts to use MSI_IterateRecords. - Properly handle -1 as a registry key root. - Rework SelfRegModules to use MSI_IterateRecords. - Rework component, feature and file loading to use MSI_IterateRecords. - Rework RegisterFonts to use MSI_IterateRecords. - Rework WriteIniValues to use MSI_IterateRecords. - Rework PublishProduct to use MSI_IterateRecords. - Rework RegisterTypeLibraries to use MSI_IterateR - Rework LaunchConditions to use MSI_IterateRecord - Rework CostFinalize to use MSI_IterateRecords. - Rework WriteRegistryValues to use MSI_IterateRecords. - Rework CreateFolders to use MSI_IterateRecords. - Use MSI_IterateRecords for processing actions. Some whitespace cleanup and replace a comment block I did not want to remove. - Flesh out the remaining keys in RegisterProduct. - Extending upon Mike McCormack's cleanup to use MSI_RecordGetString. - Register the Product Version also. Also help plug some memory leaks pointed out by Mike McCormack. - Avoid a loop where a parent's parent refers to itself as its parent. - Added module upgrade.c and implemented FindRelatedProducts. - Set the Preselected property if appropriate (relevant to MigrateFeatureStates when implemented). - Write out Product Language and Product Icon to the registry. - Write out UpgradeCodes to the registry to allow for future upgrades. - Don't get caught in loops on parent progids. - Since multiple progids can refer to 1 class we need to check if that class is isntalled instead of just relying on having it set the InstallMe variable. - Add install_on_demand for Extension servers also. currently defaulting to TRUE. - Extension need to have 1 verb to mark the given progid to be installed. - Do not loop if a ProgId's Parent Index it itself. - Add a VersionIndIndex for tracking version independent fields for the ProgIds properly. - Print a message for skipped actions in ProcessExecSequence like in the UISequence. - Do not change a features state to Advertise if it explicitly disallows it. - For typelibs index 1 do not add \\1 to the path. This cleans up registry diffs with native MSI. - Register the FileType and correct short vs long path problems with InprocServer32. Also add install_on_demand boolean for future expansion. - First pass at writing out CurVer keys for ProgIds. Also print a message for the actions we skip. Lines up with native MSI output logs for ease of comparison. - A big rewrite of the whole RegisterClass, RegisterProgId, RegisterExtension and RegisterMIME actions. We now handle verbs properly, handle dependancies and such properly and keep track of what we need to register and what we do not properly. - Allow control events to return codes to halt the processing of event. Needed for the SetTargetPath Event. - Fix situations where TARGETDIR is set to a non \ terminated path. Fixes a few installers. - Redo how we extract files from a cabinet in order to dramatically improve performance, especially if picking and choosing files out of the cabinet. - Duplicate files should not fail if unable to get Destination Directory. - Use MSI_IterateRecords for DuplicateFiles. - Add UI messages to FindRelatedProducts. - Reduce unneeded includes. - A "1" is returned not a 1 for AssignmentType. Also as a bit more to the FIXME message. - Add Language to the values we can query with MsiGetProductInfo. - Correct a crash if the length buffer is NULL. - Locate where a buffer size is not being set and correctly handle the buffer size conversion from W to A (with help from Robert Shearman). - Make sure the TRACE statements do not spew garbage by using debugstr_wn. - Restrict deformating of nested index keys [[1]]. - Introduce the beginning of group deformating {}. - Implement the [!file] format to produce the short filename. Stefan Huehner <stefan@huehner.org> - Fix more -Wstrict-prototypes warnings. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Dmitry Timoshkov <dmitry@codeweavers.com> - Make more of the OLE interface vtables const. svn path=/trunk/; revision=17034
2005-08-03 22:12:15 +00:00
#define MsiGetFileSignatureInformation WINELIB_NAME_AW(MsiGetFileSignatureInformation)
INSTALLSTATE
WINAPI
MsiLocateComponentA(
_In_ LPCSTR,
_Out_writes_opt_(*pcchBuf) LPSTR,
_Inout_opt_ LPDWORD pcchBuf);
INSTALLSTATE
WINAPI
MsiLocateComponentW(
_In_ LPCWSTR,
_Out_writes_opt_(*pcchBuf) LPWSTR,
_Inout_opt_ LPDWORD pcchBuf);
Sync to Wine-20050628: Mike McCormack <mike@codeweavers.com> - Repaint the area behind the "transparent" text control when it changes. - Implement transparency in the text control. - Make the MSI icon control work. - Make tabs work in msi dialogs. - Added support for the MSI MaskEdit control. - Use a richedit control for license text. - Fix radio button groups. Don't add the WS_GROUP style to every window. - Use standard lists in the event subscription code. - Take the dialog frame into account when calculating the dialog size. - Use MSI_QueryGetRecord in one more place. - Create a helper function to fetch a single record from a query. - More -Wmissing-declarations and -Wwrite-strings warning fixes. - Get rid of some redundant parser types. - Use the new helper function MSI_QueryGetRecord. - Use MSI_RecordGetString in more actions. - Use MSI_RecordGetString where possible. - Fixes for -Wmissing-declarations and -Wwrite-strings warnings. - Remove some unused code. - Add and correct some function declarations. - Improve number parsing and avoid unicode.h. - avoid unicode.h - add a missing function prototype - Create a stub implementation for MsiViewGetError. - Remove more types from the parser. - Test and fix the size of stream fields in a record. - Clean up headers and make some functions static. Marcus Meissner <meissner@suse.de> - Use a simpler expression for the "RichEdit20W" string to workaround compiler bug. - Remove cszbs from msi/action.h. Aric Stewart <aric@codeweavers.com> Mike McCormack <mike@codeweavers.com> - Allow dialog controls to subscribe to installer events. - Fix handling of checkbox properties. - Implement dialog events and hook up the dialog code. Aric Stewart <aric@codeweavers.com> - Break out all the file related actions and helper functions into files.c - Break out all the top level apis into install.c. - Break out all the class registration actions into classes.c. This includes RegisterClassInfo, RegisterProgIds, RegisterExtensions and RegisterMIMETypes. - Break out all the helper functions into helpers.c. - Added module upgrade.c and implemented FindRelatedProducts. - A long overdue fix to MSI_SetTargetPath. This should fix an error with some installers that where unable to change the target path. - Add functions to add the User UpgradeCodes. - A simple cleanup to only track the temp file if we need to have it laying around because the action is going on asynchronously. Otherwise clean up the temp file as the action finishes. - Introduce really basic scripting of actions. This is primarily to get the order of execution of the action correct since some custom actions can be scripted and others are run during the script building phase. - Perform ExecuteAction at UILevel 2. - Rework CreateShortcuts to use MSI_IterateRecords. - Properly handle -1 as a registry key root. - Rework SelfRegModules to use MSI_IterateRecords. - Rework component, feature and file loading to use MSI_IterateRecords. - Rework RegisterFonts to use MSI_IterateRecords. - Rework WriteIniValues to use MSI_IterateRecords. - Rework PublishProduct to use MSI_IterateRecords. - Rework RegisterTypeLibraries to use MSI_IterateR - Rework LaunchConditions to use MSI_IterateRecord - Rework CostFinalize to use MSI_IterateRecords. - Rework WriteRegistryValues to use MSI_IterateRecords. - Rework CreateFolders to use MSI_IterateRecords. - Use MSI_IterateRecords for processing actions. Some whitespace cleanup and replace a comment block I did not want to remove. - Flesh out the remaining keys in RegisterProduct. - Extending upon Mike McCormack's cleanup to use MSI_RecordGetString. - Register the Product Version also. Also help plug some memory leaks pointed out by Mike McCormack. - Avoid a loop where a parent's parent refers to itself as its parent. - Added module upgrade.c and implemented FindRelatedProducts. - Set the Preselected property if appropriate (relevant to MigrateFeatureStates when implemented). - Write out Product Language and Product Icon to the registry. - Write out UpgradeCodes to the registry to allow for future upgrades. - Don't get caught in loops on parent progids. - Since multiple progids can refer to 1 class we need to check if that class is isntalled instead of just relying on having it set the InstallMe variable. - Add install_on_demand for Extension servers also. currently defaulting to TRUE. - Extension need to have 1 verb to mark the given progid to be installed. - Do not loop if a ProgId's Parent Index it itself. - Add a VersionIndIndex for tracking version independent fields for the ProgIds properly. - Print a message for skipped actions in ProcessExecSequence like in the UISequence. - Do not change a features state to Advertise if it explicitly disallows it. - For typelibs index 1 do not add \\1 to the path. This cleans up registry diffs with native MSI. - Register the FileType and correct short vs long path problems with InprocServer32. Also add install_on_demand boolean for future expansion. - First pass at writing out CurVer keys for ProgIds. Also print a message for the actions we skip. Lines up with native MSI output logs for ease of comparison. - A big rewrite of the whole RegisterClass, RegisterProgId, RegisterExtension and RegisterMIME actions. We now handle verbs properly, handle dependancies and such properly and keep track of what we need to register and what we do not properly. - Allow control events to return codes to halt the processing of event. Needed for the SetTargetPath Event. - Fix situations where TARGETDIR is set to a non \ terminated path. Fixes a few installers. - Redo how we extract files from a cabinet in order to dramatically improve performance, especially if picking and choosing files out of the cabinet. - Duplicate files should not fail if unable to get Destination Directory. - Use MSI_IterateRecords for DuplicateFiles. - Add UI messages to FindRelatedProducts. - Reduce unneeded includes. - A "1" is returned not a 1 for AssignmentType. Also as a bit more to the FIXME message. - Add Language to the values we can query with MsiGetProductInfo. - Correct a crash if the length buffer is NULL. - Locate where a buffer size is not being set and correctly handle the buffer size conversion from W to A (with help from Robert Shearman). - Make sure the TRACE statements do not spew garbage by using debugstr_wn. - Restrict deformating of nested index keys [[1]]. - Introduce the beginning of group deformating {}. - Implement the [!file] format to produce the short filename. Stefan Huehner <stefan@huehner.org> - Fix more -Wstrict-prototypes warnings. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Dmitry Timoshkov <dmitry@codeweavers.com> - Make more of the OLE interface vtables const. svn path=/trunk/; revision=17034
2005-08-03 22:12:15 +00:00
#define MsiLocateComponent WINELIB_NAME_AW(MsiLocateComponent)
UINT
WINAPI
MsiSourceListAddSourceA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_Reserved_ DWORD,
_In_ LPCSTR);
UINT
WINAPI
MsiSourceListAddSourceW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_Reserved_ DWORD,
_In_ LPCWSTR);
#define MsiSourceListAddSource WINELIB_NAME_AW(MsiSourceListAddSource)
UINT
WINAPI
MsiSourceListEnumMediaDisksA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ DWORD,
_Out_opt_ LPDWORD,
_Out_writes_opt_(*pcchVolumeLabel) LPSTR,
_Inout_opt_ LPDWORD pcchVolumeLabel,
_Out_writes_opt_(*pcchDiskPrompt) LPSTR,
_Inout_opt_ LPDWORD pcchDiskPrompt);
UINT
WINAPI
MsiSourceListEnumMediaDisksW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ DWORD,
_Out_opt_ LPDWORD,
_Out_writes_opt_(*pcchVolumeLabel) LPWSTR,
_Inout_opt_ LPDWORD pcchVolumeLabel,
_Out_writes_opt_(*pcchDiskPrompt) LPWSTR,
_Inout_opt_ LPDWORD pcchDiskPrompt);
#define MsiSourceListEnumMediaDisks WINELIB_NAME_AW(MsiSourceListEnumMediaDisks)
UINT
WINAPI
MsiSourceListEnumSourcesA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ DWORD,
_Out_writes_opt_(*pcchSource) LPSTR,
_Inout_opt_ LPDWORD pcchSource);
UINT
WINAPI
MsiSourceListEnumSourcesW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ DWORD,
_Out_writes_opt_(*pcchSource) LPWSTR,
_Inout_opt_ LPDWORD pcchSource);
#define MsiSourceListEnumSources WINELIB_NAME_AW(MsiSourceListEnumSources)
UINT
WINAPI
MsiSourceListClearSourceA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ LPCSTR);
UINT
WINAPI
MsiSourceListClearSourceW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ LPCWSTR);
#define MsiSourceListClearSource WINELIB_NAME_AW(MsiSourceListClearSource)
UINT
WINAPI
MsiSourceListClearAllA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_Reserved_ DWORD);
UINT
WINAPI
MsiSourceListClearAllW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_Reserved_ DWORD);
#define MsiSourceListClearAll WINELIB_NAME_AW(MsiSourceListClearAll)
UINT
WINAPI
MsiSourceListGetInfoA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ LPCSTR,
_Out_writes_opt_(*pcchValue) LPSTR,
_Inout_opt_ LPDWORD pcchValue);
UINT
WINAPI
MsiSourceListGetInfoW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ LPCWSTR,
_Out_writes_opt_(*pcchValue) LPWSTR,
_Inout_opt_ LPDWORD pcchValue);
Sync to Wine-20050725: Robert Shearman <rob@codeweavers.com> - In MsiLocateComponent pcchBuf can be NULL so don't try to dereference it. Alexandre Julliard <julliard@winehq.org> - Use the official names for the Unicode string constants. Aric Stewart <aric@codeweavers.com> - Implement MsiGetLanguage. - Relocate the msi file to prevent cd locking, corrected to properly not try to relocated #nnnn handles as files. - Use the SourceList functions to get the source path in ConfigureProductExW. - Handle installs off multiple volumes and properly pull the prompt string from the error table. - If MsiGetProperty(A/W) is called with a NULL for the value buffer but a value in the size for the value buffer, then Msi fills in the size of the value into the pointer for size. This is tested and confirmed with native MSI. - Bail out if the reg key is empty. This prevents us from writing garbage to the property table. - Properly resize the buffer based on ERROR_MORE_DATA. Also remember to free the allocated buffer. - Further testing shows that when CustomActionData needs to be blank it is an empty string not ' '. - Correct an error where I was not properly advancing a pointer. - Add source.c to start handling the various MsiSourceList apis used in v3 of MSI, and now internally. - Update files.c to use the MsiSourceList apis to make sure our SourceList keys in the registry are included and correct. - Use the strings defined in msi.h. - Use SOURCEDIR instead of PackagePath. Because the PackagePath may be local, while SOURCEDIR is more proper and will be a full directory. - InstallShield does a number of actions using DoAction before the Install starts so the PackageCode needs to be loaded on OpenPackage instead of the beginning of the install process. - When working toward install on demand support we need to reset all the constant values so that multiple install process do not get confused by leftover values from the previous install. - Fill and use the ProductCode part of the MSIPACKAGE structure. - Add the string constants located in msi.h and make use of them in files.c and source.c. - Keep track of what sequence we are in and register unique actions. This allows us to make sure actions and custom actions flagged to run only once, actually run only once. - Also clean up some of the numeric constants in custom.c using the defined values from msidefs.h. Mike McCormack <mike@codeweavers.com> - gcc 4.0 -Wpointer-sign fixes. - Display icons in buttons that have them. - Use LoadImage to load bitmaps and icons. - Set the initial focus on the control specified by Control_First in the Dialog table. - Move to the next mask edit field when the current one becomes full. - Make the tab order in msi dialogs right. - Don't crash when cancelling out of a modeless dialog. - Stop the install when cancelling from a modeless dialog. svn path=/trunk/; revision=17331
2005-08-12 17:07:28 +00:00
#define MsiSourceListGetInfo WINELIB_NAME_AW(MsiSourceListGetInfo)
UINT
WINAPI
MsiSourceListSetInfoA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ LPCSTR,
_In_ LPCSTR);
UINT
WINAPI
MsiSourceListSetInfoW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ LPCWSTR,
_In_ LPCWSTR);
Sync to Wine-20050725: Robert Shearman <rob@codeweavers.com> - In MsiLocateComponent pcchBuf can be NULL so don't try to dereference it. Alexandre Julliard <julliard@winehq.org> - Use the official names for the Unicode string constants. Aric Stewart <aric@codeweavers.com> - Implement MsiGetLanguage. - Relocate the msi file to prevent cd locking, corrected to properly not try to relocated #nnnn handles as files. - Use the SourceList functions to get the source path in ConfigureProductExW. - Handle installs off multiple volumes and properly pull the prompt string from the error table. - If MsiGetProperty(A/W) is called with a NULL for the value buffer but a value in the size for the value buffer, then Msi fills in the size of the value into the pointer for size. This is tested and confirmed with native MSI. - Bail out if the reg key is empty. This prevents us from writing garbage to the property table. - Properly resize the buffer based on ERROR_MORE_DATA. Also remember to free the allocated buffer. - Further testing shows that when CustomActionData needs to be blank it is an empty string not ' '. - Correct an error where I was not properly advancing a pointer. - Add source.c to start handling the various MsiSourceList apis used in v3 of MSI, and now internally. - Update files.c to use the MsiSourceList apis to make sure our SourceList keys in the registry are included and correct. - Use the strings defined in msi.h. - Use SOURCEDIR instead of PackagePath. Because the PackagePath may be local, while SOURCEDIR is more proper and will be a full directory. - InstallShield does a number of actions using DoAction before the Install starts so the PackageCode needs to be loaded on OpenPackage instead of the beginning of the install process. - When working toward install on demand support we need to reset all the constant values so that multiple install process do not get confused by leftover values from the previous install. - Fill and use the ProductCode part of the MSIPACKAGE structure. - Add the string constants located in msi.h and make use of them in files.c and source.c. - Keep track of what sequence we are in and register unique actions. This allows us to make sure actions and custom actions flagged to run only once, actually run only once. - Also clean up some of the numeric constants in custom.c using the defined values from msidefs.h. Mike McCormack <mike@codeweavers.com> - gcc 4.0 -Wpointer-sign fixes. - Display icons in buttons that have them. - Use LoadImage to load bitmaps and icons. - Set the initial focus on the control specified by Control_First in the Dialog table. - Move to the next mask edit field when the current one becomes full. - Make the tab order in msi dialogs right. - Don't crash when cancelling out of a modeless dialog. - Stop the install when cancelling from a modeless dialog. svn path=/trunk/; revision=17331
2005-08-12 17:07:28 +00:00
#define MsiSourceListSetInfo WINELIB_NAME_AW(MsiSourceListSetInfo)
UINT
WINAPI
MsiSourceListAddSourceExA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ LPCSTR,
_In_ DWORD);
UINT
WINAPI
MsiSourceListAddSourceExW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ LPCWSTR,
_In_ DWORD);
Sync to Wine-20050725: Robert Shearman <rob@codeweavers.com> - In MsiLocateComponent pcchBuf can be NULL so don't try to dereference it. Alexandre Julliard <julliard@winehq.org> - Use the official names for the Unicode string constants. Aric Stewart <aric@codeweavers.com> - Implement MsiGetLanguage. - Relocate the msi file to prevent cd locking, corrected to properly not try to relocated #nnnn handles as files. - Use the SourceList functions to get the source path in ConfigureProductExW. - Handle installs off multiple volumes and properly pull the prompt string from the error table. - If MsiGetProperty(A/W) is called with a NULL for the value buffer but a value in the size for the value buffer, then Msi fills in the size of the value into the pointer for size. This is tested and confirmed with native MSI. - Bail out if the reg key is empty. This prevents us from writing garbage to the property table. - Properly resize the buffer based on ERROR_MORE_DATA. Also remember to free the allocated buffer. - Further testing shows that when CustomActionData needs to be blank it is an empty string not ' '. - Correct an error where I was not properly advancing a pointer. - Add source.c to start handling the various MsiSourceList apis used in v3 of MSI, and now internally. - Update files.c to use the MsiSourceList apis to make sure our SourceList keys in the registry are included and correct. - Use the strings defined in msi.h. - Use SOURCEDIR instead of PackagePath. Because the PackagePath may be local, while SOURCEDIR is more proper and will be a full directory. - InstallShield does a number of actions using DoAction before the Install starts so the PackageCode needs to be loaded on OpenPackage instead of the beginning of the install process. - When working toward install on demand support we need to reset all the constant values so that multiple install process do not get confused by leftover values from the previous install. - Fill and use the ProductCode part of the MSIPACKAGE structure. - Add the string constants located in msi.h and make use of them in files.c and source.c. - Keep track of what sequence we are in and register unique actions. This allows us to make sure actions and custom actions flagged to run only once, actually run only once. - Also clean up some of the numeric constants in custom.c using the defined values from msidefs.h. Mike McCormack <mike@codeweavers.com> - gcc 4.0 -Wpointer-sign fixes. - Display icons in buttons that have them. - Use LoadImage to load bitmaps and icons. - Set the initial focus on the control specified by Control_First in the Dialog table. - Move to the next mask edit field when the current one becomes full. - Make the tab order in msi dialogs right. - Don't crash when cancelling out of a modeless dialog. - Stop the install when cancelling from a modeless dialog. svn path=/trunk/; revision=17331
2005-08-12 17:07:28 +00:00
#define MsiSourceListAddSourceEx WINELIB_NAME_AW(MsiSourceListAddSourceEx)
UINT
WINAPI
MsiSourceListAddMediaDiskA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ DWORD,
_In_opt_ LPCSTR,
_In_opt_ LPCSTR);
UINT
WINAPI
MsiSourceListAddMediaDiskW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD,
_In_ DWORD,
_In_opt_ LPCWSTR,
_In_opt_ LPCWSTR);
Sync to Wine-20050725: Robert Shearman <rob@codeweavers.com> - In MsiLocateComponent pcchBuf can be NULL so don't try to dereference it. Alexandre Julliard <julliard@winehq.org> - Use the official names for the Unicode string constants. Aric Stewart <aric@codeweavers.com> - Implement MsiGetLanguage. - Relocate the msi file to prevent cd locking, corrected to properly not try to relocated #nnnn handles as files. - Use the SourceList functions to get the source path in ConfigureProductExW. - Handle installs off multiple volumes and properly pull the prompt string from the error table. - If MsiGetProperty(A/W) is called with a NULL for the value buffer but a value in the size for the value buffer, then Msi fills in the size of the value into the pointer for size. This is tested and confirmed with native MSI. - Bail out if the reg key is empty. This prevents us from writing garbage to the property table. - Properly resize the buffer based on ERROR_MORE_DATA. Also remember to free the allocated buffer. - Further testing shows that when CustomActionData needs to be blank it is an empty string not ' '. - Correct an error where I was not properly advancing a pointer. - Add source.c to start handling the various MsiSourceList apis used in v3 of MSI, and now internally. - Update files.c to use the MsiSourceList apis to make sure our SourceList keys in the registry are included and correct. - Use the strings defined in msi.h. - Use SOURCEDIR instead of PackagePath. Because the PackagePath may be local, while SOURCEDIR is more proper and will be a full directory. - InstallShield does a number of actions using DoAction before the Install starts so the PackageCode needs to be loaded on OpenPackage instead of the beginning of the install process. - When working toward install on demand support we need to reset all the constant values so that multiple install process do not get confused by leftover values from the previous install. - Fill and use the ProductCode part of the MSIPACKAGE structure. - Add the string constants located in msi.h and make use of them in files.c and source.c. - Keep track of what sequence we are in and register unique actions. This allows us to make sure actions and custom actions flagged to run only once, actually run only once. - Also clean up some of the numeric constants in custom.c using the defined values from msidefs.h. Mike McCormack <mike@codeweavers.com> - gcc 4.0 -Wpointer-sign fixes. - Display icons in buttons that have them. - Use LoadImage to load bitmaps and icons. - Set the initial focus on the control specified by Control_First in the Dialog table. - Move to the next mask edit field when the current one becomes full. - Make the tab order in msi dialogs right. - Don't crash when cancelling out of a modeless dialog. - Stop the install when cancelling from a modeless dialog. svn path=/trunk/; revision=17331
2005-08-12 17:07:28 +00:00
#define MsiSourceListAddMediaDisk WINELIB_NAME_AW(MsiSourceListAddMediaDisk)
UINT WINAPI MsiSourceListForceResolutionA(const CHAR*, const CHAR*, DWORD);
UINT WINAPI MsiSourceListForceResolutionW(const WCHAR*, const WCHAR*, DWORD);
#define MsiSourceListForceResolution WINELIB_NAME_AW(MsiSourceListForceResolution)
UINT
WINAPI
MsiEnumPatchesA(
_In_ LPCSTR,
_In_ DWORD,
_Out_writes_(MAX_GUID_CHARS + 1) LPSTR,
_Out_writes_(*pcchTransformsBuf) LPSTR,
_Inout_ LPDWORD pcchTransformsBuf);
UINT
WINAPI
MsiEnumPatchesW(
_In_ LPCWSTR,
_In_ DWORD,
_Out_writes_(MAX_GUID_CHARS + 1) LPWSTR,
_Out_writes_(*pcchTransformsBuf) LPWSTR,
_Inout_ LPDWORD pcchTransformsBuf);
Sync to Wine-0_9_1: Ivan Leo Puoti <ivanleo@gmail.com> - Fix some wrong prototypes. Thomas Weidenmueller <wine-patches@reactsoft.com> - Passing NULL as the last two parameters to ReadFile is illegal and actually causes a crash on windows. The attached patch fixes this. Aric Stewart <aric@codeweavers.com> - Force files to install if the REINSTALL property is set. Mike McCormack <mike@codeweavers.com> - Some installers don't call the CreateFolders action before the InstallFiles action as MSDN specifies, but it still seems to work, so make sure that we create component directories in the InstallFiles action anyway. - Create component folders in the CreateFolders action. - If an action fails, print out its name as well as the error code. Use %d for error codes so it's easy to match them up to something in winerror.h. - Rename load_dynamic_stringW to msi_dup_record_field to better describe what it does, and replace a few instances with MSI_RecordGetString to avoid allocating memory. - Tidy up the RegisterProduct action a little. - Create a stub function to apply a single table transform and call it where we need to apply transforms. - Enumerate the substorage transforms for any patches that are passed on the command line with PATCH=. Need to implement table_apply_transform() before this will do anything interesting. - Simplify register_progid() and remove a fixed length buffer. - Make enter and escape trigger the default and cancel buttons in dialogs. - Switch back to using IPicture to load images. LoadImage did the resizing for us, but doesn't handle jpeg files and requires us writing a temp file, whereas IPicture handles jpeg files and can load directly from a stream. - Remove unused package parameter of register_progid_base(). - Remove an incorrect comment and check for 0 being an invalid file handle. - Add missing semicolons that caused compile trouble on FreeBSD. - Extract file directly to their target location, bypassing the need to use temporary files and move files. - Put the UI update code for cabinet file into a separate function. - Translate INVALID_HANDLE_VALUE to zero for cabinet handles. - Fix a memory leak in the cabinet extracting code. - Fix passing of NULL pointers to MsiDecomposeDescriptor and add a test. - Fix parameter handling in MsiSetTargetPath, and add a test for it. - Deleted two buggy functions that incorrectly and inefficiently check whether a row already exists in a table, and replaced them with a call to an existing working function that does the same thing correctly. - Fix and test MsiGetProperty and MsiSetProperty. - Add a stub implementation of msi.MsiSetMode. - NULL and empty strings are the same in conditions. - Add a bunch of tests for MsiEvaluateCondition and make them pass. - Fix error handling in MsiEvaluateCondition. - Create the +msidb debug channel for msi database code. - Implement transforms. This still includes some debugging code which can be enabled by setting debug_transform to 1 in the relevant places. - Define NONAMELESSUNION and NONAMELESSSTRUCT for older compilers. - Remove some redundant null pointer checks. - Make sure to unregister all the classes that were registered when msi is unloaded, so we can register again cleanly. - Fix a memory leak. - Implement the RemoveFiles action. - Add a read-only implementation of the SelectionTree control. - Make sure we only CoUninitialize after successfully initializing. Fix the address of the returned IShellLinkDataList interface. - Use an enumeration for file states. - Handle MaskEdit masks containing dashes and other constant characters. - Stub implementation for MsiAdvertiseScriptA/W. - Add a stub for the AllocateRegistrySpace action. - Explicitly check for MSICONDITION_TRUE being returned from MsiEvaluateCondition. - Stub implementation for MsiGetFileHashA/W. - Define MSIDBOPEN_ constants using LPCWSTR when compiling Wine. - Improve MsiUseFeatureEx and MsiGetFeatureState a little, add some simple test cases. - Use msi_get_property_int() in a few more places. - Implement MsiGetFeatureUsageA and MsiUseFeature(Ex)A using their W versions. - Use "static const" rather than "const static" as gcc -W complains about the former. - Add an implementation for MsiGetShortcutTargetA/W. - Don't change the UI level during ExecuteAction. - Return an error in MsiGetComponentPathW if passed a null component. - Remove the unused 1st parameter of ACTION_VerifyComponentForAction. - Fix MsiGetPropertyA/W spec declarations. - Create an internal handle-free api for reading MSI database summary information. svn path=/trunk/; revision=19307
2005-11-17 20:49:37 +00:00
#define MsiEnumPatches WINELIB_NAME_AW(MsiEnumPatches)
UINT
WINAPI
MsiEnumPatchesExA(
_In_opt_ LPCSTR,
_In_opt_ LPCSTR,
_In_ DWORD,
_In_ DWORD,
_In_ DWORD,
_Out_writes_opt_(MAX_GUID_CHARS + 1) LPSTR,
_Out_writes_opt_(MAX_GUID_CHARS + 1) LPSTR,
_Out_opt_ MSIINSTALLCONTEXT*,
_Out_writes_opt_(*pcchTargetUserSid) LPSTR,
_Inout_opt_ LPDWORD pcchTargetUserSid);
UINT
WINAPI
MsiEnumPatchesExW(
_In_opt_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ DWORD,
_In_ DWORD,
_In_ DWORD,
_Out_writes_opt_(MAX_GUID_CHARS + 1) LPWSTR,
_Out_writes_opt_(MAX_GUID_CHARS + 1) LPWSTR,
_Out_opt_ MSIINSTALLCONTEXT*,
_Out_writes_opt_(*pcchTargetUserSid) LPWSTR,
_Inout_opt_ LPDWORD pcchTargetUserSid);
#define MsiEnumPatchesEx WINELIB_NAME_AW(MsiEnumPatchesEx)
UINT
WINAPI
MsiGetFileHashA(
_In_ LPCSTR,
_In_ DWORD,
_Inout_ PMSIFILEHASHINFO);
UINT
WINAPI
MsiGetFileHashW(
_In_ LPCWSTR,
_In_ DWORD,
_Inout_ PMSIFILEHASHINFO);
Sync to Wine-0_9_1: Ivan Leo Puoti <ivanleo@gmail.com> - Fix some wrong prototypes. Thomas Weidenmueller <wine-patches@reactsoft.com> - Passing NULL as the last two parameters to ReadFile is illegal and actually causes a crash on windows. The attached patch fixes this. Aric Stewart <aric@codeweavers.com> - Force files to install if the REINSTALL property is set. Mike McCormack <mike@codeweavers.com> - Some installers don't call the CreateFolders action before the InstallFiles action as MSDN specifies, but it still seems to work, so make sure that we create component directories in the InstallFiles action anyway. - Create component folders in the CreateFolders action. - If an action fails, print out its name as well as the error code. Use %d for error codes so it's easy to match them up to something in winerror.h. - Rename load_dynamic_stringW to msi_dup_record_field to better describe what it does, and replace a few instances with MSI_RecordGetString to avoid allocating memory. - Tidy up the RegisterProduct action a little. - Create a stub function to apply a single table transform and call it where we need to apply transforms. - Enumerate the substorage transforms for any patches that are passed on the command line with PATCH=. Need to implement table_apply_transform() before this will do anything interesting. - Simplify register_progid() and remove a fixed length buffer. - Make enter and escape trigger the default and cancel buttons in dialogs. - Switch back to using IPicture to load images. LoadImage did the resizing for us, but doesn't handle jpeg files and requires us writing a temp file, whereas IPicture handles jpeg files and can load directly from a stream. - Remove unused package parameter of register_progid_base(). - Remove an incorrect comment and check for 0 being an invalid file handle. - Add missing semicolons that caused compile trouble on FreeBSD. - Extract file directly to their target location, bypassing the need to use temporary files and move files. - Put the UI update code for cabinet file into a separate function. - Translate INVALID_HANDLE_VALUE to zero for cabinet handles. - Fix a memory leak in the cabinet extracting code. - Fix passing of NULL pointers to MsiDecomposeDescriptor and add a test. - Fix parameter handling in MsiSetTargetPath, and add a test for it. - Deleted two buggy functions that incorrectly and inefficiently check whether a row already exists in a table, and replaced them with a call to an existing working function that does the same thing correctly. - Fix and test MsiGetProperty and MsiSetProperty. - Add a stub implementation of msi.MsiSetMode. - NULL and empty strings are the same in conditions. - Add a bunch of tests for MsiEvaluateCondition and make them pass. - Fix error handling in MsiEvaluateCondition. - Create the +msidb debug channel for msi database code. - Implement transforms. This still includes some debugging code which can be enabled by setting debug_transform to 1 in the relevant places. - Define NONAMELESSUNION and NONAMELESSSTRUCT for older compilers. - Remove some redundant null pointer checks. - Make sure to unregister all the classes that were registered when msi is unloaded, so we can register again cleanly. - Fix a memory leak. - Implement the RemoveFiles action. - Add a read-only implementation of the SelectionTree control. - Make sure we only CoUninitialize after successfully initializing. Fix the address of the returned IShellLinkDataList interface. - Use an enumeration for file states. - Handle MaskEdit masks containing dashes and other constant characters. - Stub implementation for MsiAdvertiseScriptA/W. - Add a stub for the AllocateRegistrySpace action. - Explicitly check for MSICONDITION_TRUE being returned from MsiEvaluateCondition. - Stub implementation for MsiGetFileHashA/W. - Define MSIDBOPEN_ constants using LPCWSTR when compiling Wine. - Improve MsiUseFeatureEx and MsiGetFeatureState a little, add some simple test cases. - Use msi_get_property_int() in a few more places. - Implement MsiGetFeatureUsageA and MsiUseFeature(Ex)A using their W versions. - Use "static const" rather than "const static" as gcc -W complains about the former. - Add an implementation for MsiGetShortcutTargetA/W. - Don't change the UI level during ExecuteAction. - Return an error in MsiGetComponentPathW if passed a null component. - Remove the unused 1st parameter of ACTION_VerifyComponentForAction. - Fix MsiGetPropertyA/W spec declarations. - Create an internal handle-free api for reading MSI database summary information. svn path=/trunk/; revision=19307
2005-11-17 20:49:37 +00:00
#define MsiGetFileHash WINELIB_NAME_AW(MsiGetFileHash)
UINT
WINAPI
MsiAdvertiseScriptA(
_In_ LPCSTR,
_In_ DWORD,
_In_opt_ PHKEY,
_In_ BOOL);
UINT
WINAPI
MsiAdvertiseScriptW(
_In_ LPCWSTR,
_In_ DWORD,
_In_opt_ PHKEY,
_In_ BOOL);
Sync to Wine-0_9_1: Ivan Leo Puoti <ivanleo@gmail.com> - Fix some wrong prototypes. Thomas Weidenmueller <wine-patches@reactsoft.com> - Passing NULL as the last two parameters to ReadFile is illegal and actually causes a crash on windows. The attached patch fixes this. Aric Stewart <aric@codeweavers.com> - Force files to install if the REINSTALL property is set. Mike McCormack <mike@codeweavers.com> - Some installers don't call the CreateFolders action before the InstallFiles action as MSDN specifies, but it still seems to work, so make sure that we create component directories in the InstallFiles action anyway. - Create component folders in the CreateFolders action. - If an action fails, print out its name as well as the error code. Use %d for error codes so it's easy to match them up to something in winerror.h. - Rename load_dynamic_stringW to msi_dup_record_field to better describe what it does, and replace a few instances with MSI_RecordGetString to avoid allocating memory. - Tidy up the RegisterProduct action a little. - Create a stub function to apply a single table transform and call it where we need to apply transforms. - Enumerate the substorage transforms for any patches that are passed on the command line with PATCH=. Need to implement table_apply_transform() before this will do anything interesting. - Simplify register_progid() and remove a fixed length buffer. - Make enter and escape trigger the default and cancel buttons in dialogs. - Switch back to using IPicture to load images. LoadImage did the resizing for us, but doesn't handle jpeg files and requires us writing a temp file, whereas IPicture handles jpeg files and can load directly from a stream. - Remove unused package parameter of register_progid_base(). - Remove an incorrect comment and check for 0 being an invalid file handle. - Add missing semicolons that caused compile trouble on FreeBSD. - Extract file directly to their target location, bypassing the need to use temporary files and move files. - Put the UI update code for cabinet file into a separate function. - Translate INVALID_HANDLE_VALUE to zero for cabinet handles. - Fix a memory leak in the cabinet extracting code. - Fix passing of NULL pointers to MsiDecomposeDescriptor and add a test. - Fix parameter handling in MsiSetTargetPath, and add a test for it. - Deleted two buggy functions that incorrectly and inefficiently check whether a row already exists in a table, and replaced them with a call to an existing working function that does the same thing correctly. - Fix and test MsiGetProperty and MsiSetProperty. - Add a stub implementation of msi.MsiSetMode. - NULL and empty strings are the same in conditions. - Add a bunch of tests for MsiEvaluateCondition and make them pass. - Fix error handling in MsiEvaluateCondition. - Create the +msidb debug channel for msi database code. - Implement transforms. This still includes some debugging code which can be enabled by setting debug_transform to 1 in the relevant places. - Define NONAMELESSUNION and NONAMELESSSTRUCT for older compilers. - Remove some redundant null pointer checks. - Make sure to unregister all the classes that were registered when msi is unloaded, so we can register again cleanly. - Fix a memory leak. - Implement the RemoveFiles action. - Add a read-only implementation of the SelectionTree control. - Make sure we only CoUninitialize after successfully initializing. Fix the address of the returned IShellLinkDataList interface. - Use an enumeration for file states. - Handle MaskEdit masks containing dashes and other constant characters. - Stub implementation for MsiAdvertiseScriptA/W. - Add a stub for the AllocateRegistrySpace action. - Explicitly check for MSICONDITION_TRUE being returned from MsiEvaluateCondition. - Stub implementation for MsiGetFileHashA/W. - Define MSIDBOPEN_ constants using LPCWSTR when compiling Wine. - Improve MsiUseFeatureEx and MsiGetFeatureState a little, add some simple test cases. - Use msi_get_property_int() in a few more places. - Implement MsiGetFeatureUsageA and MsiUseFeature(Ex)A using their W versions. - Use "static const" rather than "const static" as gcc -W complains about the former. - Add an implementation for MsiGetShortcutTargetA/W. - Don't change the UI level during ExecuteAction. - Return an error in MsiGetComponentPathW if passed a null component. - Remove the unused 1st parameter of ACTION_VerifyComponentForAction. - Fix MsiGetPropertyA/W spec declarations. - Create an internal handle-free api for reading MSI database summary information. svn path=/trunk/; revision=19307
2005-11-17 20:49:37 +00:00
#define MsiAdvertiseScript WINELIB_NAME_AW(MsiAdvertiseScript)
UINT WINAPI MsiIsProductElevatedA(_In_ LPCSTR, _Out_ BOOL *);
UINT WINAPI MsiIsProductElevatedW(_In_ LPCWSTR, _Out_ BOOL *);
#define MsiIsProductElevated WINELIB_NAME_AW(MsiIsProductElevated)
UINT WINAPI MsiDatabaseMergeA(MSIHANDLE, MSIHANDLE, LPCSTR);
UINT WINAPI MsiDatabaseMergeW(MSIHANDLE, MSIHANDLE, LPCWSTR);
#define MsiDatabaseMerge WINELIB_NAME_AW(MsiDatabaseMerge)
UINT
WINAPI
MsiInstallMissingComponentA(
_In_ LPCSTR,
_In_ LPCSTR,
_In_ INSTALLSTATE);
UINT
WINAPI
MsiInstallMissingComponentW(
_In_ LPCWSTR,
_In_ LPCWSTR,
_In_ INSTALLSTATE);
#define MsiInstallMissingComponent WINELIB_NAME_AW(MsiInstallMissingComponent)
UINT
WINAPI
MsiDetermineApplicablePatchesA(
_In_ LPCSTR,
_In_ DWORD cPatchInfo,
_Inout_updates_(cPatchInfo) PMSIPATCHSEQUENCEINFOA);
UINT
WINAPI
MsiDetermineApplicablePatchesW(
_In_ LPCWSTR,
_In_ DWORD cPatchInfo,
_Inout_updates_(cPatchInfo) PMSIPATCHSEQUENCEINFOW);
#define MsiDetermineApplicablePatches WINELIB_NAME_AW(MsiDetermineApplicablePatches)
UINT
WINAPI
MsiDeterminePatchSequenceA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD cPatchInfo,
_Inout_updates_(cPatchInfo) PMSIPATCHSEQUENCEINFOA);
UINT
WINAPI
MsiDeterminePatchSequenceW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_ MSIINSTALLCONTEXT,
_In_ DWORD cPatchInfo,
_Inout_updates_(cPatchInfo) PMSIPATCHSEQUENCEINFOW);
#define MsiDeterminePatchSequence WINELIB_NAME_AW(MsiDeterminePatchSequence)
UINT
WINAPI
MsiApplyMultiplePatchesA(
_In_ LPCSTR,
_In_opt_ LPCSTR,
_In_opt_ LPCSTR);
UINT
WINAPI
MsiApplyMultiplePatchesW(
_In_ LPCWSTR,
_In_opt_ LPCWSTR,
_In_opt_ LPCWSTR);
#define MsiApplyMultiplePatches WINELIB_NAME_AW(MsiApplyMultiplePatches)
UINT
WINAPI
MsiBeginTransactionA(
_In_ LPCSTR,
_In_ DWORD,
_Out_ MSIHANDLE *,
_Out_ HANDLE *);
UINT
WINAPI
MsiBeginTransactionW(
_In_ LPCWSTR,
_In_ DWORD,
_Out_ MSIHANDLE *,
_Out_ HANDLE *);
#define MsiBeginTransaction WINELIB_NAME_AW(MsiBeginTransaction)
UINT WINAPI MsiEndTransaction(_In_ DWORD);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
/* Non Unicode */
UINT WINAPI MsiCloseHandle(MSIHANDLE);
Sync to Wine-20050211 Mike McCormack <mike@codeweavers.com> - add support for Edit boxes in MSI dialogs - run the message loop when waiting for threads or processes - fix the dialog font - allow waiting on a handle while running the message loop - implement checkboxes in dialogs - use TextStyle enumeration instead of numbers - fix MSI_IterateRecords to return the correct count - Add more dialog controls, do something when they're clicked on. - Implement MsiPreviewDialog. - Implement and document MsiLoadString. - Added stub implementations for MsiPreviewDialog and MsiPreviewBillboard. - Fix MsiModifyView and MsiViewGetColumnInfo to use MSIRECORD* not MSIHANDLE. - Implement, test and document MsiDecomposeDescriptor. - Handle a number as a parameter for custom action 19. - Move OpenQuery into msiquery.c and make it non-static. - Fix and test inserting records. - Fix refcounting, use Interlocked functions. - MsiEvaluateCondition returns an error when passed NULL as a condition. - Lock record in MsiViewExecute, move stubs to end. - Fix MsiRecordSetString for NULL strings and update test case. - Fix a bug caused by freeing memory too soon in the table code. - Update headers, add MsiGetUserInfoA stub implementation. - Fix a memory leak in MsiConfigureProductExW. - Indentation and style cleanup. - implement MsiOpenPackageEx, and forward MsiOpenPackage there - make a MSI_CreatePackage function and use it in MSI_OpenPackage - move MsiOpenPackageA down with the rest of the API functions Juan Lang <juan_lang@yahoo.com> - Partially implement AppSearch action. - If a full path isn't specified, search across all fixed drives. - Simplify AppSearch error checking. - Identifiers evaluate to true if they are non-empty, regardless of value. Aric Stewart <aric@codeweavers.com> - action.c is getting too big, so split out all the handling of 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. - Move the guid squishing functions out of msi.c and make a new 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. - Added a few more stub implementations. - Implement custom action type 19, Halt install and display error message. - Continued work to simplify the ProcessAction call, also split it into a ProcessAction and ProcessUIAction for future dialog box work. Also fix a bug in deformat_string where i was not freeing the created record. - Make a temp file for each dll saved for custom actions. This prevents name collisions from causing custom actions to fail. - Do not track the temp files for custom actions based on the name from the table because then we get conflicts and files not tracked or cleaned up. - Add the RegisterUser action. - Implement RegisterExtensionInfo and RegisterMIMEInfo. - Add logic to be able to resolve the SourceDir based on CurrentPath. Also add logic to get the source locations of a file if it is not in a cabinet. - Finish up the framework by stubbing out all the remaining Standard actions. - A fix to deformat_string so it only returns a null return if you provided a null buffer. - Eliminate the giant if.. else if block from ACTION_ProcessAction in favor of a table of handlers. - Return code of the install should not depend on the return code of the final action. - Update component installed states as they are installed so that conditions based on component states are at least a little more correct. - Add icon and argument when regestering clsids. - Add a stub for ResolveSource because we do that work just not in ResolveSource like we should. - When quering a Component state return the correct state. - Enable the updating of Feature and thus the resulting component states. - Run the end of install actions for suspend and user exit states as well. - Start putting in place a currently running state for future ui use. - Use the new registry functions in registry.c. - Do not force a reboot, just return ERROR_INSTALL_SUSPEND and write some keys to the registry. - Quite a few fixes: - 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. - Implementations for SelfRegModules and PublishFeatures. - Set default ACTION property for Install. - Deformat more than JUST properties properly. Allows for Files and Component paths in deformat. - Properly deformat a LaunchCondition failure dialog box. - Resolve and save registry Keypaths. - Write the Features published keys more correctly. Still some problems. - First implementation of the WriteIniValues action. - Custom actions can have null in their target parameters, handle that without crashing. Also enable deformating of lines greater than 256 characters. - Added some more suminfo stubs. - An implementation of MsiSummaryInfoGetPropertyW based off of MsiSummaryInfoGetPropertyA. - Added stubs for MsiGetShortcutTargetA/W. - Do a very basic first implementation of MsiConfigureProductExW for msiexec /@ when run as a reboot. - Also add a number of new stubs for the office xp and 2k3 install and startup process. - Fix a copy and paste error, check for a null value and discard unneeded errors. - Do not limit properties to 256 characters when evaluating them. - Setting a record to an empty string is the same as making it null. - First pass implement ion of MsiQueryProductState[A/W] as well as a few fixes for MsiGetComponentPath. - Actually start on an implemention for MsiGetComponentPathW that should handle all keypaths that are files. - A reworking of format.c to remove the recursion, clean things up and stabilize behavior to match windows. - Cleanup processing a bit more. - Allow for nested keys to work properly. - MsiGetProperty does not return any error on missing properties. - The new Insert fixes now properly require ?,? instead of just ? for the Insert call. This fix modifies the MSI_SetProperty query to be correct. Michael Stefaniuc <mstefani@redhat.de> - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Ulrich Czekalla <ulrich@codeweavers.com> - Handle 0 length buffers in MSI_FormatRecordW. - Remove unused buffer in deformat_string. Mike Hearn <mh@codeweavers.com> - Correctly ensure properties set from resolved directory paths are backslash terminated. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Marcus Meissner <meissner@suse.de> - Initialize rc in create_component_directory(). Alexandre Julliard <julliard@winehq.org> - Avoid unnecessary run-time initializations. svn path=/trunk/; revision=13518
2005-02-12 22:59:04 +00:00
UINT WINAPI MsiCloseAllHandles(void);
INSTALLUILEVEL WINAPI MsiSetInternalUI(_In_ INSTALLUILEVEL, _Inout_opt_ HWND*);
UINT
WINAPI
MsiSetExternalUIRecord(
_In_opt_ INSTALLUI_HANDLER_RECORD,
_In_ DWORD,
_In_opt_ LPVOID,
_Out_opt_ PINSTALLUI_HANDLER_RECORD);
#ifdef __cplusplus
}
#endif
#endif /* __WINE_MSI_H */