msi: Make MSI_SetPropertyW take a pointer to a database instead of a package.

This commit is contained in:
Hans Leidekker 2010-04-21 11:38:17 +02:00 committed by Alexandre Julliard
parent 186f4efa3f
commit 44b7983913
11 changed files with 143 additions and 124 deletions

View File

@ -277,9 +277,13 @@ UINT msi_parse_command_line( MSIPACKAGE *package, LPCWSTR szCommandLine,
if (lstrlenW(prop) > 0) if (lstrlenW(prop) > 0)
{ {
UINT r = MSI_SetPropertyW( package->db, prop, val );
TRACE("Found commandline property (%s) = (%s)\n", TRACE("Found commandline property (%s) = (%s)\n",
debugstr_w(prop), debugstr_w(val)); debugstr_w(prop), debugstr_w(val));
MSI_SetPropertyW(package,prop,val);
if (r == ERROR_SUCCESS && !strcmpW( prop, cszSourceDir ))
msi_reset_folders( package, TRUE );
} }
msi_free(val); msi_free(val);
msi_free(prop); msi_free(prop);
@ -477,7 +481,7 @@ static UINT msi_set_media_source_prop(MSIPACKAGE *package)
{ {
prop = MSI_RecordGetString(rec, 1); prop = MSI_RecordGetString(rec, 1);
patch = msi_dup_property(package->db, szPatch); patch = msi_dup_property(package->db, szPatch);
MSI_SetPropertyW(package, prop, patch); MSI_SetPropertyW(package->db, prop, patch);
msi_free(patch); msi_free(patch);
} }
@ -668,13 +672,16 @@ static UINT msi_set_sourcedir_props(MSIPACKAGE *package, BOOL replace)
check = msi_dup_property( package->db, cszSourceDir ); check = msi_dup_property( package->db, cszSourceDir );
if (!check || replace) if (!check || replace)
MSI_SetPropertyW( package, cszSourceDir, source ); {
UINT r = MSI_SetPropertyW( package->db, cszSourceDir, source );
if (r == ERROR_SUCCESS)
msi_reset_folders( package, TRUE );
}
msi_free( check ); msi_free( check );
check = msi_dup_property( package->db, cszSOURCEDIR ); check = msi_dup_property( package->db, cszSOURCEDIR );
if (!check || replace) if (!check || replace)
MSI_SetPropertyW( package, cszSOURCEDIR, source ); MSI_SetPropertyW( package->db, cszSOURCEDIR, source );
msi_free( check ); msi_free( check );
msi_free( source ); msi_free( source );
@ -1513,8 +1520,8 @@ static UINT ACTION_CostInitialize(MSIPACKAGE *package)
static const WCHAR szCosting[] = static const WCHAR szCosting[] =
{'C','o','s','t','i','n','g','C','o','m','p','l','e','t','e',0 }; {'C','o','s','t','i','n','g','C','o','m','p','l','e','t','e',0 };
MSI_SetPropertyW(package, szCosting, szZero); MSI_SetPropertyW( package->db, szCosting, szZero );
MSI_SetPropertyW(package, cszRootDrive, c_colon); MSI_SetPropertyW( package->db, cszRootDrive, c_colon );
load_all_folders( package ); load_all_folders( package );
load_all_components( package ); load_all_components( package );
@ -1684,7 +1691,7 @@ static BOOL process_overrides( MSIPACKAGE *package, int level )
ret |= process_state_property( package, level, szAdvertise, INSTALLSTATE_ADVERTISED ); ret |= process_state_property( package, level, szAdvertise, INSTALLSTATE_ADVERTISED );
if (ret) if (ret)
MSI_SetPropertyW( package, szPreselected, szOne ); MSI_SetPropertyW( package->db, szPreselected, szOne );
return ret; return ret;
} }
@ -2077,15 +2084,15 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package)
} }
} }
MSI_SetPropertyW(package,szCosting,szOne); MSI_SetPropertyW( package->db, szCosting, szOne );
/* set default run level if not set */ /* set default run level if not set */
level = msi_dup_property( package->db, szlevel ); level = msi_dup_property( package->db, szlevel );
if (!level) if (!level)
MSI_SetPropertyW(package,szlevel, szOne); MSI_SetPropertyW( package->db, szlevel, szOne );
msi_free(level); msi_free(level);
/* FIXME: check volume disk space */ /* FIXME: check volume disk space */
MSI_SetPropertyW(package, szOutOfDiskSpace, szZero); MSI_SetPropertyW( package->db, szOutOfDiskSpace, szZero );
return MSI_SetFeatureStates(package); return MSI_SetFeatureStates(package);
} }
@ -6795,7 +6802,7 @@ static UINT ACTION_ValidateProductID( MSIPACKAGE *package )
if (key && template) if (key && template)
{ {
FIXME( "partial stub: template %s key %s\n", debugstr_w(template), debugstr_w(key) ); FIXME( "partial stub: template %s key %s\n", debugstr_w(template), debugstr_w(key) );
r = MSI_SetPropertyW( package, szProductID, key ); r = MSI_SetPropertyW( package->db, szProductID, key );
} }
msi_free( template ); msi_free( template );
msi_free( key ); msi_free( key );
@ -7209,7 +7216,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
static const WCHAR szAction[] = {'A','C','T','I','O','N',0}; static const WCHAR szAction[] = {'A','C','T','I','O','N',0};
static const WCHAR szInstall[] = {'I','N','S','T','A','L','L',0}; static const WCHAR szInstall[] = {'I','N','S','T','A','L','L',0};
MSI_SetPropertyW(package, szAction, szInstall); MSI_SetPropertyW( package->db, szAction, szInstall );
package->script->InWhatSequence = SEQUENCE_INSTALL; package->script->InWhatSequence = SEQUENCE_INSTALL;
@ -7257,7 +7264,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
if (!szCommandLine && msi_get_property_int( package->db, szInstalled, 0 )) if (!szCommandLine && msi_get_property_int( package->db, szInstalled, 0 ))
{ {
TRACE("setting reinstall property\n"); TRACE("setting reinstall property\n");
MSI_SetPropertyW( package, szReinstall, szAll ); MSI_SetPropertyW( package->db, szReinstall, szAll );
} }
/* properties may have been added by a transform */ /* properties may have been added by a transform */

View File

@ -1041,7 +1041,10 @@ static UINT iterate_appsearch(MSIRECORD *row, LPVOID param)
r = ACTION_AppSearchSigName(package, sigName, &sig, &value); r = ACTION_AppSearchSigName(package, sigName, &sig, &value);
if (value) if (value)
{ {
MSI_SetPropertyW(package, propName, value); r = MSI_SetPropertyW( package->db, propName, value );
if (r == ERROR_SUCCESS && !strcmpW( propName, cszSourceDir ))
msi_reset_folders( package, TRUE );
msi_free(value); msi_free(value);
} }
ACTION_FreeSignature(&sig); ACTION_FreeSignature(&sig);
@ -1100,7 +1103,7 @@ static UINT ITERATE_CCPSearch(MSIRECORD *row, LPVOID param)
if (value) if (value)
{ {
TRACE("Found signature %s\n", debugstr_w(signature)); TRACE("Found signature %s\n", debugstr_w(signature));
MSI_SetPropertyW(package, success, szOne); MSI_SetPropertyW(package->db, success, szOne);
msi_free(value); msi_free(value);
r = ERROR_NO_MORE_ITEMS; r = ERROR_NO_MORE_ITEMS;
} }

View File

@ -163,17 +163,17 @@ static void set_deferred_action_props(MSIPACKAGE *package, LPWSTR deferred_data)
end = strstrW(beg, sep); end = strstrW(beg, sep);
*end = '\0'; *end = '\0';
MSI_SetPropertyW(package, szCustomActionData, beg); MSI_SetPropertyW(package->db, szCustomActionData, beg);
beg = end + 3; beg = end + 3;
end = strstrW(beg, sep); end = strstrW(beg, sep);
*end = '\0'; *end = '\0';
MSI_SetPropertyW(package, szUserSID, beg); MSI_SetPropertyW(package->db, szUserSID, beg);
beg = end + 3; beg = end + 3;
end = strchrW(beg, ']'); end = strchrW(beg, ']');
*end = '\0'; *end = '\0';
MSI_SetPropertyW(package, szProductCode, beg); MSI_SetPropertyW(package->db, szProductCode, beg);
} }
UINT ACTION_CustomAction(MSIPACKAGE *package, LPCWSTR action, UINT script, BOOL execute) UINT ACTION_CustomAction(MSIPACKAGE *package, LPCWSTR action, UINT script, BOOL execute)
@ -276,9 +276,9 @@ UINT ACTION_CustomAction(MSIPACKAGE *package, LPCWSTR action, UINT script, BOOL
if (deferred_data) if (deferred_data)
set_deferred_action_props(package, deferred_data); set_deferred_action_props(package, deferred_data);
else if (actiondata) else if (actiondata)
MSI_SetPropertyW(package, szCustomActionData, actiondata); MSI_SetPropertyW(package->db, szCustomActionData, actiondata);
else else
MSI_SetPropertyW(package, szCustomActionData, szEmpty); MSI_SetPropertyW(package->db, szCustomActionData, szEmpty);
msi_free(actiondata); msi_free(actiondata);
} }
@ -327,7 +327,9 @@ UINT ACTION_CustomAction(MSIPACKAGE *package, LPCWSTR action, UINT script, BOOL
break; break;
deformat_string(package,target,&deformated); deformat_string(package,target,&deformated);
rc = MSI_SetPropertyW(package,source,deformated); rc = MSI_SetPropertyW( package->db, source, deformated );
if (rc == ERROR_SUCCESS && !strcmpW( source, cszSourceDir ))
msi_reset_folders( package, TRUE );
msi_free(deformated); msi_free(deformated);
break; break;
case 37: /* JScript/VBScript text stored in target column. */ case 37: /* JScript/VBScript text stored in target column. */

View File

@ -583,6 +583,13 @@ static void msi_dialog_update_controls( msi_dialog *dialog, LPCWSTR property )
} }
} }
static void msi_dialog_set_property( MSIPACKAGE *package, LPCWSTR property, LPCWSTR value )
{
UINT r = MSI_SetPropertyW( package->db, property, value );
if (r == ERROR_SUCCESS && !strcmpW( property, cszSourceDir ))
msi_reset_folders( package, TRUE );
}
/* called from the Control Event subscription code */ /* called from the Control Event subscription code */
void msi_dialog_handle_event( msi_dialog* dialog, LPCWSTR control, void msi_dialog_handle_event( msi_dialog* dialog, LPCWSTR control,
LPCWSTR attribute, MSIRECORD *rec ) LPCWSTR attribute, MSIRECORD *rec )
@ -636,7 +643,7 @@ void msi_dialog_handle_event( msi_dialog* dialog, LPCWSTR control,
else if ( !lstrcmpW(attribute, szProperty) ) else if ( !lstrcmpW(attribute, szProperty) )
{ {
MSIFEATURE *feature = msi_seltree_get_selected_feature( ctrl ); MSIFEATURE *feature = msi_seltree_get_selected_feature( ctrl );
MSI_SetPropertyW( dialog->package, ctrl->property, feature->Directory ); msi_dialog_set_property( dialog->package, ctrl->property, feature->Directory );
} }
else if ( !lstrcmpW(attribute, szSelectionPath) ) else if ( !lstrcmpW(attribute, szSelectionPath) )
{ {
@ -1330,8 +1337,7 @@ static UINT msi_dialog_combobox_handler( msi_dialog *dialog,
else else
value = (LPWSTR) SendMessageW( control->hwnd, CB_GETITEMDATA, index, 0 ); value = (LPWSTR) SendMessageW( control->hwnd, CB_GETITEMDATA, index, 0 );
MSI_SetPropertyW( info->dialog->package, msi_dialog_set_property( info->dialog->package, control->property, value );
control->property, value );
msi_dialog_evaluate_control_conditions( info->dialog ); msi_dialog_evaluate_control_conditions( info->dialog );
if (index == CB_ERR) if (index == CB_ERR)
@ -1538,10 +1544,9 @@ static void msi_mask_control_change( struct msi_maskedit_info *info )
if( i == info->num_groups ) if( i == info->num_groups )
{ {
TRACE("Set property %s to %s\n", TRACE("Set property %s to %s\n", debugstr_w(info->prop), debugstr_w(val));
debugstr_w(info->prop), debugstr_w(val) );
CharUpperBuffW( val, info->num_chars ); CharUpperBuffW( val, info->num_chars );
MSI_SetPropertyW( info->dialog->package, info->prop, val ); msi_dialog_set_property( info->dialog->package, info->prop, val );
msi_dialog_evaluate_control_conditions( info->dialog ); msi_dialog_evaluate_control_conditions( info->dialog );
} }
msi_free( val ); msi_free( val );
@ -1891,7 +1896,7 @@ static BOOL msi_dialog_onkillfocus( msi_dialog *dialog, msi_control *control )
else else
{ {
valid = TRUE; valid = TRUE;
MSI_SetPropertyW( dialog->package, prop, buf ); msi_dialog_set_property( dialog->package, prop, buf );
} }
msi_dialog_update_pathedit( dialog, control ); msi_dialog_update_pathedit( dialog, control );
@ -2543,8 +2548,7 @@ static UINT msi_dialog_listbox_handler( msi_dialog *dialog,
index = SendMessageW( control->hwnd, LB_GETCURSEL, 0, 0 ); index = SendMessageW( control->hwnd, LB_GETCURSEL, 0, 0 );
value = (LPCWSTR) SendMessageW( control->hwnd, LB_GETITEMDATA, index, 0 ); value = (LPCWSTR) SendMessageW( control->hwnd, LB_GETITEMDATA, index, 0 );
MSI_SetPropertyW( info->dialog->package, msi_dialog_set_property( info->dialog->package, control->property, value );
control->property, value );
msi_dialog_evaluate_control_conditions( info->dialog ); msi_dialog_evaluate_control_conditions( info->dialog );
return ERROR_SUCCESS; return ERROR_SUCCESS;
@ -2707,7 +2711,7 @@ UINT msi_dialog_directorylist_up( msi_dialog *dialog )
if (ptr != path) *(ptr - 1) = '\0'; if (ptr != path) *(ptr - 1) = '\0';
PathAddBackslashW( path ); PathAddBackslashW( path );
MSI_SetPropertyW( dialog->package, prop, path ); msi_dialog_set_property( dialog->package, prop, path );
msi_dialog_update_directory_list( dialog, NULL ); msi_dialog_update_directory_list( dialog, NULL );
msi_dialog_update_directory_combo( dialog, NULL ); msi_dialog_update_directory_combo( dialog, NULL );
@ -2753,7 +2757,7 @@ static UINT msi_dialog_dirlist_handler( msi_dialog *dialog,
lstrcatW( new_path, text ); lstrcatW( new_path, text );
lstrcatW( new_path, szBackSlash ); lstrcatW( new_path, szBackSlash );
MSI_SetPropertyW( dialog->package, prop, new_path ); msi_dialog_set_property( dialog->package, prop, new_path );
msi_dialog_update_directory_list( dialog, NULL ); msi_dialog_update_directory_list( dialog, NULL );
msi_dialog_update_directory_combo( dialog, NULL ); msi_dialog_update_directory_combo( dialog, NULL );
@ -2996,7 +3000,7 @@ static UINT msi_dialog_volsel_handler( msi_dialog *dialog,
indirect = control->attributes & msidbControlAttributesIndirect; indirect = control->attributes & msidbControlAttributesIndirect;
prop = msi_dialog_dup_property( dialog, control->property, indirect ); prop = msi_dialog_dup_property( dialog, control->property, indirect );
MSI_SetPropertyW( dialog->package, prop, text ); msi_dialog_set_property( dialog->package, prop, text );
msi_free( prop ); msi_free( prop );
return ERROR_SUCCESS; return ERROR_SUCCESS;
@ -3399,7 +3403,7 @@ static UINT msi_dialog_send_event( msi_dialog *dialog, LPCWSTR event, LPCWSTR ar
return ERROR_SUCCESS; return ERROR_SUCCESS;
} }
static UINT msi_dialog_set_property( msi_dialog *dialog, LPCWSTR event, LPCWSTR arg ) static UINT msi_dialog_set_property_event( msi_dialog *dialog, LPCWSTR event, LPCWSTR arg )
{ {
static const WCHAR szNullArg[] = { '{','}',0 }; static const WCHAR szNullArg[] = { '{','}',0 };
LPWSTR p, prop, arg_fmt = NULL; LPWSTR p, prop, arg_fmt = NULL;
@ -3414,7 +3418,7 @@ static UINT msi_dialog_set_property( msi_dialog *dialog, LPCWSTR event, LPCWSTR
*p = 0; *p = 0;
if( strcmpW( szNullArg, arg ) ) if( strcmpW( szNullArg, arg ) )
deformat_string( dialog->package, arg, &arg_fmt ); deformat_string( dialog->package, arg, &arg_fmt );
MSI_SetPropertyW( dialog->package, prop, arg_fmt ); msi_dialog_set_property( dialog->package, prop, arg_fmt );
msi_dialog_update_controls( dialog, prop ); msi_dialog_update_controls( dialog, prop );
msi_free( arg_fmt ); msi_free( arg_fmt );
} }
@ -3437,7 +3441,7 @@ static UINT msi_dialog_control_event( MSIRECORD *rec, LPVOID param )
event = MSI_RecordGetString( rec, 3 ); event = MSI_RecordGetString( rec, 3 );
arg = MSI_RecordGetString( rec, 4 ); arg = MSI_RecordGetString( rec, 4 );
if( event[0] == '[' ) if( event[0] == '[' )
msi_dialog_set_property( dialog, event, arg ); msi_dialog_set_property_event( dialog, event, arg );
else else
msi_dialog_send_event( dialog, event, arg ); msi_dialog_send_event( dialog, event, arg );
} }
@ -3565,7 +3569,7 @@ static void msi_dialog_set_checkbox_state( msi_dialog *dialog,
/* if uncheck then the property is set to NULL */ /* if uncheck then the property is set to NULL */
if (!state) if (!state)
{ {
MSI_SetPropertyW( dialog->package, control->property, NULL ); msi_dialog_set_property( dialog->package, control->property, NULL );
return; return;
} }
@ -3575,7 +3579,7 @@ static void msi_dialog_set_checkbox_state( msi_dialog *dialog,
else else
val = szState; val = szState;
MSI_SetPropertyW( dialog->package, control->property, val ); msi_dialog_set_property( dialog->package, control->property, val );
} }
static void msi_dialog_checkbox_sync_state( msi_dialog *dialog, static void msi_dialog_checkbox_sync_state( msi_dialog *dialog,
@ -3619,8 +3623,7 @@ static UINT msi_dialog_edit_handler( msi_dialog *dialog,
debugstr_w(control->property)); debugstr_w(control->property));
buf = msi_get_window_text( control->hwnd ); buf = msi_get_window_text( control->hwnd );
MSI_SetPropertyW( dialog->package, control->property, buf ); msi_dialog_set_property( dialog->package, control->property, buf );
msi_free( buf ); msi_free( buf );
return ERROR_SUCCESS; return ERROR_SUCCESS;
@ -3635,7 +3638,7 @@ static UINT msi_dialog_radiogroup_handler( msi_dialog *dialog,
TRACE("clicked radio button %s, set %s\n", debugstr_w(control->name), TRACE("clicked radio button %s, set %s\n", debugstr_w(control->name),
debugstr_w(control->property)); debugstr_w(control->property));
MSI_SetPropertyW( dialog->package, control->property, control->name ); msi_dialog_set_property( dialog->package, control->property, control->name );
return msi_dialog_button_handler( dialog, control, param ); return msi_dialog_button_handler( dialog, control, param );
} }
@ -4021,7 +4024,7 @@ static UINT error_dialog_handler(MSIPACKAGE *package, LPCWSTR event,
if ( !lstrcmpW( argument, error_abort ) || !lstrcmpW( argument, error_cancel ) || if ( !lstrcmpW( argument, error_abort ) || !lstrcmpW( argument, error_cancel ) ||
!lstrcmpW( argument, error_no ) ) !lstrcmpW( argument, error_no ) )
{ {
MSI_SetPropertyW( package, result_prop, error_abort ); MSI_SetPropertyW( package->db, result_prop, error_abort );
} }
ControlEvent_CleanupSubscriptions(package); ControlEvent_CleanupSubscriptions(package);

View File

@ -380,7 +380,7 @@ static UINT ControlEvent_DirectoryListUp(MSIPACKAGE *package, LPCWSTR argument,
static UINT ControlEvent_ReinstallMode(MSIPACKAGE *package, LPCWSTR argument, static UINT ControlEvent_ReinstallMode(MSIPACKAGE *package, LPCWSTR argument,
msi_dialog *dialog) msi_dialog *dialog)
{ {
return MSI_SetPropertyW( package, szReinstallMode, argument ); return MSI_SetPropertyW( package->db, szReinstallMode, argument );
} }
static UINT ControlEvent_Reinstall( MSIPACKAGE *package, LPCWSTR argument, static UINT ControlEvent_Reinstall( MSIPACKAGE *package, LPCWSTR argument,
@ -413,7 +413,7 @@ static UINT ControlEvent_ValidateProductID(MSIPACKAGE *package, LPCWSTR argument
if (key && template) if (key && template)
{ {
FIXME( "partial stub: template %s key %s\n", debugstr_w(template), debugstr_w(key) ); FIXME( "partial stub: template %s key %s\n", debugstr_w(template), debugstr_w(key) );
ret = MSI_SetPropertyW( package, szProductID, key ); ret = MSI_SetPropertyW( package->db, szProductID, key );
} }
msi_free( template ); msi_free( template );
msi_free( key ); msi_free( key );

View File

@ -270,14 +270,14 @@ LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source,
{ {
check_path = msi_dup_property( package->db, cszRootDrive ); check_path = msi_dup_property( package->db, cszRootDrive );
if (set_prop) if (set_prop)
MSI_SetPropertyW(package,cszTargetDir,check_path); MSI_SetPropertyW( package->db, cszTargetDir, check_path );
} }
/* correct misbuilt target dir */ /* correct misbuilt target dir */
path = build_directory_name(2, check_path, NULL); path = build_directory_name(2, check_path, NULL);
clean_spaces_from_path( path ); clean_spaces_from_path( path );
if (strcmpiW(path,check_path)!=0) if (strcmpiW(path,check_path)!=0)
MSI_SetPropertyW(package,cszTargetDir,path); MSI_SetPropertyW( package->db, cszTargetDir, path );
msi_free(check_path); msi_free(check_path);
f->ResolvedTarget = path; f->ResolvedTarget = path;
@ -310,7 +310,7 @@ LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source,
TRACE(" internally set to %s\n",debugstr_w(path)); TRACE(" internally set to %s\n",debugstr_w(path));
if (set_prop) if (set_prop)
MSI_SetPropertyW( package, name, path ); MSI_SetPropertyW( package->db, name, path );
return path; return path;
} }
@ -338,7 +338,7 @@ LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source,
f->ResolvedTarget = strdupW( path ); f->ResolvedTarget = strdupW( path );
TRACE("target -> %s\n", debugstr_w(path)); TRACE("target -> %s\n", debugstr_w(path));
if (set_prop) if (set_prop)
MSI_SetPropertyW(package,name,path); MSI_SetPropertyW( package->db, name, path );
} }
else else
{ {

View File

@ -1284,7 +1284,7 @@ UINT MSI_SetInstallLevel( MSIPACKAGE *package, int iInstallLevel )
return MSI_SetFeatureStates( package ); return MSI_SetFeatureStates( package );
sprintfW( level, fmt, iInstallLevel ); sprintfW( level, fmt, iInstallLevel );
r = MSI_SetPropertyW( package, szInstallLevel, level ); r = MSI_SetPropertyW( package->db, szInstallLevel, level );
if ( r == ERROR_SUCCESS ) if ( r == ERROR_SUCCESS )
r = MSI_SetFeatureStates( package ); r = MSI_SetFeatureStates( package );

View File

@ -3535,10 +3535,10 @@ UINT WINAPI MsiReinstallFeatureW( LPCWSTR szProduct, LPCWSTR szFeature,
if (r != ERROR_SUCCESS) if (r != ERROR_SUCCESS)
return r; return r;
MSI_SetPropertyW( package, szReinstallMode, reinstallmode ); MSI_SetPropertyW( package->db, szReinstallMode, reinstallmode );
MSI_SetPropertyW( package, szInstalled, szOne ); MSI_SetPropertyW( package->db, szInstalled, szOne );
MSI_SetPropertyW( package, szLogVerbose, szOne ); MSI_SetPropertyW( package->db, szLogVerbose, szOne );
MSI_SetPropertyW( package, szReinstall, szFeature ); MSI_SetPropertyW( package->db, szReinstall, szFeature );
r = MSI_InstallPackage( package, sourcepath, NULL ); r = MSI_InstallPackage( package, sourcepath, NULL );

View File

@ -746,7 +746,7 @@ extern UINT MSI_SetInstallLevel( MSIPACKAGE *package, int iInstallLevel );
extern MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *, LPCWSTR ); extern MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *, LPCWSTR );
extern UINT MSI_OpenPackageW( LPCWSTR szPackage, MSIPACKAGE **pPackage ); extern UINT MSI_OpenPackageW( LPCWSTR szPackage, MSIPACKAGE **pPackage );
extern UINT MSI_SetTargetPathW( MSIPACKAGE *, LPCWSTR, LPCWSTR ); extern UINT MSI_SetTargetPathW( MSIPACKAGE *, LPCWSTR, LPCWSTR );
extern UINT MSI_SetPropertyW( MSIPACKAGE *, LPCWSTR, LPCWSTR ); extern UINT MSI_SetPropertyW( MSIDATABASE *, LPCWSTR, LPCWSTR );
extern INT MSI_ProcessMessage( MSIPACKAGE *, INSTALLMESSAGE, MSIRECORD * ); extern INT MSI_ProcessMessage( MSIPACKAGE *, INSTALLMESSAGE, MSIRECORD * );
extern UINT MSI_GetPropertyW( MSIDATABASE *, LPCWSTR, LPWSTR, LPDWORD ); extern UINT MSI_GetPropertyW( MSIDATABASE *, LPCWSTR, LPWSTR, LPDWORD );
extern MSICONDITION MSI_EvaluateConditionW( MSIPACKAGE *, LPCWSTR ); extern MSICONDITION MSI_EvaluateConditionW( MSIPACKAGE *, LPCWSTR );
@ -974,6 +974,7 @@ extern int msi_get_property_int( MSIDATABASE *package, LPCWSTR prop, int def );
extern LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source, extern LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source,
BOOL set_prop, BOOL load_prop, MSIFOLDER **folder); BOOL set_prop, BOOL load_prop, MSIFOLDER **folder);
extern LPWSTR resolve_file_source(MSIPACKAGE *package, MSIFILE *file); extern LPWSTR resolve_file_source(MSIPACKAGE *package, MSIFILE *file);
extern void msi_reset_folders( MSIPACKAGE *package, BOOL source );
extern MSICOMPONENT *get_loaded_component( MSIPACKAGE* package, LPCWSTR Component ); extern MSICOMPONENT *get_loaded_component( MSIPACKAGE* package, LPCWSTR Component );
extern MSIFEATURE *get_loaded_feature( MSIPACKAGE* package, LPCWSTR Feature ); extern MSIFEATURE *get_loaded_feature( MSIPACKAGE* package, LPCWSTR Feature );
extern MSIFILE *get_loaded_file( MSIPACKAGE* package, LPCWSTR file ); extern MSIFILE *get_loaded_file( MSIPACKAGE* package, LPCWSTR file );

View File

@ -388,7 +388,7 @@ static UINT set_installed_prop( MSIPACKAGE *package )
if (r == ERROR_SUCCESS) if (r == ERROR_SUCCESS)
{ {
RegCloseKey( hkey ); RegCloseKey( hkey );
MSI_SetPropertyW( package, szInstalled, szOne ); MSI_SetPropertyW( package->db, szInstalled, szOne );
} }
return r; return r;
@ -431,7 +431,7 @@ static UINT set_user_sid_prop( MSIPACKAGE *package )
if (!ConvertSidToStringSidW( psid, &sid_str )) if (!ConvertSidToStringSidW( psid, &sid_str ))
goto done; goto done;
r = MSI_SetPropertyW( package, szUserSID, sid_str ); r = MSI_SetPropertyW( package->db, szUserSID, sid_str );
done: done:
LocalFree( sid_str ); LocalFree( sid_str );
@ -563,7 +563,7 @@ static void set_msi_assembly_prop(MSIPACKAGE *package)
if (!val_len || !verstr) if (!val_len || !verstr)
goto done; goto done;
MSI_SetPropertyW(package, netasm, verstr); MSI_SetPropertyW(package->db, netasm, verstr);
done: done:
msi_free(fusion); msi_free(fusion);
@ -689,96 +689,96 @@ static VOID set_installer_properties(MSIPACKAGE *package)
SHGetFolderPathW(NULL,CSIDL_PROGRAM_FILES_COMMON,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_PROGRAM_FILES_COMMON,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, CFF, pth); MSI_SetPropertyW(package->db, CFF, pth);
SHGetFolderPathW(NULL,CSIDL_PROGRAM_FILES,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_PROGRAM_FILES,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, PFF, pth); MSI_SetPropertyW(package->db, PFF, pth);
SHGetFolderPathW(NULL,CSIDL_COMMON_APPDATA,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_COMMON_APPDATA,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, CADF, pth); MSI_SetPropertyW(package->db, CADF, pth);
SHGetFolderPathW(NULL,CSIDL_FAVORITES,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_FAVORITES,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, FaF, pth); MSI_SetPropertyW(package->db, FaF, pth);
SHGetFolderPathW(NULL,CSIDL_FONTS,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_FONTS,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, FoF, pth); MSI_SetPropertyW(package->db, FoF, pth);
SHGetFolderPathW(NULL,CSIDL_SENDTO,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_SENDTO,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, SendTF, pth); MSI_SetPropertyW(package->db, SendTF, pth);
SHGetFolderPathW(NULL,CSIDL_STARTMENU,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_STARTMENU,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, SMF, pth); MSI_SetPropertyW(package->db, SMF, pth);
SHGetFolderPathW(NULL,CSIDL_STARTUP,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_STARTUP,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, StF, pth); MSI_SetPropertyW(package->db, StF, pth);
SHGetFolderPathW(NULL,CSIDL_TEMPLATES,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_TEMPLATES,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, TemplF, pth); MSI_SetPropertyW(package->db, TemplF, pth);
SHGetFolderPathW(NULL,CSIDL_DESKTOP,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_DESKTOP,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, DF, pth); MSI_SetPropertyW(package->db, DF, pth);
SHGetFolderPathW(NULL,CSIDL_PROGRAMS,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_PROGRAMS,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, PMF, pth); MSI_SetPropertyW(package->db, PMF, pth);
SHGetFolderPathW(NULL,CSIDL_ADMINTOOLS,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_ADMINTOOLS,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, ATF, pth); MSI_SetPropertyW(package->db, ATF, pth);
SHGetFolderPathW(NULL,CSIDL_APPDATA,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_APPDATA,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, ADF, pth); MSI_SetPropertyW(package->db, ADF, pth);
SHGetFolderPathW(NULL,CSIDL_SYSTEM,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_SYSTEM,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, SF, pth); MSI_SetPropertyW(package->db, SF, pth);
MSI_SetPropertyW(package, SF16, pth); MSI_SetPropertyW(package->db, SF16, pth);
SHGetFolderPathW(NULL,CSIDL_LOCAL_APPDATA,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_LOCAL_APPDATA,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, LADF, pth); MSI_SetPropertyW(package->db, LADF, pth);
SHGetFolderPathW(NULL,CSIDL_MYPICTURES,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_MYPICTURES,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, MPF, pth); MSI_SetPropertyW(package->db, MPF, pth);
SHGetFolderPathW(NULL,CSIDL_PERSONAL,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_PERSONAL,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, PF, pth); MSI_SetPropertyW(package->db, PF, pth);
SHGetFolderPathW(NULL,CSIDL_WINDOWS,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_WINDOWS,NULL,0,pth);
strcatW(pth, szBackSlash); strcatW(pth, szBackSlash);
MSI_SetPropertyW(package, WF, pth); MSI_SetPropertyW(package->db, WF, pth);
/* Physical Memory is specified in MB. Using total amount. */ /* Physical Memory is specified in MB. Using total amount. */
msex.dwLength = sizeof(msex); msex.dwLength = sizeof(msex);
GlobalMemoryStatusEx( &msex ); GlobalMemoryStatusEx( &msex );
sprintfW( bufstr, szIntFormat, (int)(msex.ullTotalPhys/1024/1024)); sprintfW( bufstr, szIntFormat, (int)(msex.ullTotalPhys/1024/1024));
MSI_SetPropertyW(package, szPhysicalMemory, bufstr); MSI_SetPropertyW(package->db, szPhysicalMemory, bufstr);
SHGetFolderPathW(NULL,CSIDL_WINDOWS,NULL,0,pth); SHGetFolderPathW(NULL,CSIDL_WINDOWS,NULL,0,pth);
ptr = strchrW(pth,'\\'); ptr = strchrW(pth,'\\');
if (ptr) if (ptr)
*(ptr+1) = 0; *(ptr+1) = 0;
MSI_SetPropertyW(package, WV, pth); MSI_SetPropertyW(package->db, WV, pth);
GetTempPathW(MAX_PATH,pth); GetTempPathW(MAX_PATH,pth);
MSI_SetPropertyW(package, TF, pth); MSI_SetPropertyW(package->db, TF, pth);
/* in a wine environment the user is always admin and privileged */ /* in a wine environment the user is always admin and privileged */
MSI_SetPropertyW(package,szAdminUser,szOne); MSI_SetPropertyW(package->db, szAdminUser, szOne);
MSI_SetPropertyW(package,szPriv,szOne); MSI_SetPropertyW(package->db, szPriv, szOne);
/* set the os things */ /* set the os things */
OSVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW); OSVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
@ -788,39 +788,39 @@ static VOID set_installer_properties(MSIPACKAGE *package)
switch (OSVersion.dwPlatformId) switch (OSVersion.dwPlatformId)
{ {
case VER_PLATFORM_WIN32_WINDOWS: case VER_PLATFORM_WIN32_WINDOWS:
MSI_SetPropertyW(package,v9x,verstr); MSI_SetPropertyW(package->db, v9x, verstr);
break; break;
case VER_PLATFORM_WIN32_NT: case VER_PLATFORM_WIN32_NT:
MSI_SetPropertyW(package,vNT,verstr); MSI_SetPropertyW(package->db, vNT, verstr);
sprintfW(verstr,szFormat,OSVersion.wProductType); sprintfW(verstr,szFormat,OSVersion.wProductType);
MSI_SetPropertyW(package,szMsiNTProductType,verstr); MSI_SetPropertyW(package->db, szMsiNTProductType, verstr);
break; break;
} }
sprintfW(verstr,szFormat,OSVersion.dwBuildNumber); sprintfW(verstr,szFormat,OSVersion.dwBuildNumber);
MSI_SetPropertyW(package,szWinBuild,verstr); MSI_SetPropertyW(package->db, szWinBuild, verstr);
/* just fudge this */ /* just fudge this */
MSI_SetPropertyW(package,szSPL,szSix); MSI_SetPropertyW(package->db, szSPL, szSix);
sprintfW( bufstr, szFormat2, MSI_MAJORVERSION, MSI_MINORVERSION); sprintfW( bufstr, szFormat2, MSI_MAJORVERSION, MSI_MINORVERSION);
MSI_SetPropertyW( package, szVersionMsi, bufstr ); MSI_SetPropertyW( package->db, szVersionMsi, bufstr );
sprintfW( bufstr, szFormat, MSI_MAJORVERSION * 100); sprintfW( bufstr, szFormat, MSI_MAJORVERSION * 100);
MSI_SetPropertyW( package, szVersionDatabase, bufstr ); MSI_SetPropertyW( package->db, szVersionDatabase, bufstr );
GetSystemInfo( &sys_info ); GetSystemInfo( &sys_info );
if (sys_info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL) if (sys_info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)
{ {
sprintfW( bufstr, szIntFormat, sys_info.wProcessorLevel ); sprintfW( bufstr, szIntFormat, sys_info.wProcessorLevel );
MSI_SetPropertyW( package, szIntel, bufstr ); MSI_SetPropertyW( package->db, szIntel, bufstr );
} }
/* Screen properties. */ /* Screen properties. */
dc = GetDC(0); dc = GetDC(0);
sprintfW( bufstr, szIntFormat, GetDeviceCaps( dc, HORZRES ) ); sprintfW( bufstr, szIntFormat, GetDeviceCaps( dc, HORZRES ) );
MSI_SetPropertyW( package, szScreenX, bufstr ); MSI_SetPropertyW( package->db, szScreenX, bufstr );
sprintfW( bufstr, szIntFormat, GetDeviceCaps( dc, VERTRES )); sprintfW( bufstr, szIntFormat, GetDeviceCaps( dc, VERTRES ));
MSI_SetPropertyW( package, szScreenY, bufstr ); MSI_SetPropertyW( package->db, szScreenY, bufstr );
sprintfW( bufstr, szIntFormat, GetDeviceCaps( dc, BITSPIXEL )); sprintfW( bufstr, szIntFormat, GetDeviceCaps( dc, BITSPIXEL ));
MSI_SetPropertyW( package, szColorBits, bufstr ); MSI_SetPropertyW( package->db, szColorBits, bufstr );
ReleaseDC(0, dc); ReleaseDC(0, dc);
/* USERNAME and COMPANYNAME */ /* USERNAME and COMPANYNAME */
@ -832,10 +832,10 @@ static VOID set_installer_properties(MSIPACKAGE *package)
{ {
if (!username && if (!username &&
(username = msi_reg_get_val_str( hkey, szDefName ))) (username = msi_reg_get_val_str( hkey, szDefName )))
MSI_SetPropertyW( package, szUSERNAME, username ); MSI_SetPropertyW( package->db, szUSERNAME, username );
if (!companyname && if (!companyname &&
(companyname = msi_reg_get_val_str( hkey, szDefCompany ))) (companyname = msi_reg_get_val_str( hkey, szDefCompany )))
MSI_SetPropertyW( package, szCOMPANYNAME, companyname ); MSI_SetPropertyW( package->db, szCOMPANYNAME, companyname );
CloseHandle( hkey ); CloseHandle( hkey );
} }
if ((!username || !companyname) && if ((!username || !companyname) &&
@ -843,10 +843,10 @@ static VOID set_installer_properties(MSIPACKAGE *package)
{ {
if (!username && if (!username &&
(username = msi_reg_get_val_str( hkey, szRegisteredUser ))) (username = msi_reg_get_val_str( hkey, szRegisteredUser )))
MSI_SetPropertyW( package, szUSERNAME, username ); MSI_SetPropertyW( package->db, szUSERNAME, username );
if (!companyname && if (!companyname &&
(companyname = msi_reg_get_val_str( hkey, szRegisteredOrg ))) (companyname = msi_reg_get_val_str( hkey, szRegisteredOrg )))
MSI_SetPropertyW( package, szCOMPANYNAME, companyname ); MSI_SetPropertyW( package->db, szCOMPANYNAME, companyname );
CloseHandle( hkey ); CloseHandle( hkey );
} }
msi_free( username ); msi_free( username );
@ -859,7 +859,7 @@ static VOID set_installer_properties(MSIPACKAGE *package)
GetSystemTime( &systemtime ); GetSystemTime( &systemtime );
if (GetDateFormatW( LOCALE_USER_DEFAULT, DATE_SHORTDATE, &systemtime, if (GetDateFormatW( LOCALE_USER_DEFAULT, DATE_SHORTDATE, &systemtime,
NULL, bufstr, sizeof(bufstr)/sizeof(bufstr[0]) )) NULL, bufstr, sizeof(bufstr)/sizeof(bufstr[0]) ))
MSI_SetPropertyW( package, szDate, bufstr ); MSI_SetPropertyW( package->db, szDate, bufstr );
else else
ERR("Couldn't set Date property: GetDateFormat failed with error %d\n", GetLastError()); ERR("Couldn't set Date property: GetDateFormat failed with error %d\n", GetLastError());
@ -867,7 +867,7 @@ static VOID set_installer_properties(MSIPACKAGE *package)
TIME_FORCE24HOURFORMAT | TIME_NOTIMEMARKER, TIME_FORCE24HOURFORMAT | TIME_NOTIMEMARKER,
&systemtime, NULL, bufstr, &systemtime, NULL, bufstr,
sizeof(bufstr)/sizeof(bufstr[0]) )) sizeof(bufstr)/sizeof(bufstr[0]) ))
MSI_SetPropertyW( package, szTime, bufstr ); MSI_SetPropertyW( package->db, szTime, bufstr );
else else
ERR("Couldn't set Time property: GetTimeFormat failed with error %d\n", GetLastError()); ERR("Couldn't set Time property: GetTimeFormat failed with error %d\n", GetLastError());
@ -875,16 +875,14 @@ static VOID set_installer_properties(MSIPACKAGE *package)
langid = GetUserDefaultLangID(); langid = GetUserDefaultLangID();
sprintfW(bufstr, szIntFormat, langid); sprintfW(bufstr, szIntFormat, langid);
MSI_SetPropertyW( package->db, szUserLangID, bufstr );
MSI_SetPropertyW( package, szUserLangID, bufstr );
langid = GetSystemDefaultLangID(); langid = GetSystemDefaultLangID();
sprintfW(bufstr, szIntFormat, langid); sprintfW(bufstr, szIntFormat, langid);
MSI_SetPropertyW( package->db, szSystemLangID, bufstr );
MSI_SetPropertyW( package, szSystemLangID, bufstr );
sprintfW(bufstr, szIntFormat, MsiQueryProductStateW(package->ProductCode)); sprintfW(bufstr, szIntFormat, MsiQueryProductStateW(package->ProductCode));
MSI_SetPropertyW( package, szProductState, bufstr ); MSI_SetPropertyW( package->db, szProductState, bufstr );
len = 0; len = 0;
if (!GetUserNameW( NULL, &len ) && GetLastError() == ERROR_MORE_DATA) if (!GetUserNameW( NULL, &len ) && GetLastError() == ERROR_MORE_DATA)
@ -893,7 +891,7 @@ static VOID set_installer_properties(MSIPACKAGE *package)
if ((username = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) if ((username = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
{ {
if (GetUserNameW( username, &len )) if (GetUserNameW( username, &len ))
MSI_SetPropertyW( package, szLogonUser, username ); MSI_SetPropertyW( package->db, szLogonUser, username );
HeapFree( GetProcessHeap(), 0, username ); HeapFree( GetProcessHeap(), 0, username );
} }
} }
@ -952,7 +950,7 @@ static UINT msi_load_summary_properties( MSIPACKAGE *package )
goto done; goto done;
} }
MSI_SetPropertyW( package, szPackageCode, package_code ); MSI_SetPropertyW( package->db, szPackageCode, package_code );
msi_free( package_code ); msi_free( package_code );
/* load package attributes */ /* load package attributes */
@ -1016,7 +1014,7 @@ static void adjust_allusers_property( MSIPACKAGE *package )
if (msi_get_property_int( package->db, szAllUsers, 0 ) == 2) if (msi_get_property_int( package->db, szAllUsers, 0 ) == 2)
{ {
TRACE("resetting ALLUSERS property from 2 to 1\n"); TRACE("resetting ALLUSERS property from 2 to 1\n");
MSI_SetPropertyW( package, szAllUsers, szOne ); MSI_SetPropertyW( package->db, szAllUsers, szOne );
} }
} }
@ -1048,7 +1046,7 @@ MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db, LPCWSTR base_url )
set_installer_properties( package ); set_installer_properties( package );
sprintfW(uilevel,szpi,gUILevel); sprintfW(uilevel,szpi,gUILevel);
MSI_SetPropertyW(package, szLevel, uilevel); MSI_SetPropertyW(package->db, szLevel, uilevel);
r = msi_load_summary_properties( package ); r = msi_load_summary_properties( package );
if (r != ERROR_SUCCESS) if (r != ERROR_SUCCESS)
@ -1273,18 +1271,18 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage)
if( file != szPackage ) if( file != szPackage )
track_tempfile( package, file ); track_tempfile( package, file );
MSI_SetPropertyW( package, Database, db->path ); MSI_SetPropertyW( package->db, Database, db->path );
if( UrlIsW( szPackage, URLIS_URL ) ) if( UrlIsW( szPackage, URLIS_URL ) )
MSI_SetPropertyW( package, OriginalDatabase, szPackage ); MSI_SetPropertyW( package->db, OriginalDatabase, szPackage );
else if( szPackage[0] == '#' ) else if( szPackage[0] == '#' )
MSI_SetPropertyW( package, OriginalDatabase, db->path ); MSI_SetPropertyW( package->db, OriginalDatabase, db->path );
else else
{ {
WCHAR fullpath[MAX_PATH]; WCHAR fullpath[MAX_PATH];
GetFullPathNameW( szPackage, MAX_PATH, fullpath, NULL ); GetFullPathNameW( szPackage, MAX_PATH, fullpath, NULL );
MSI_SetPropertyW( package, OriginalDatabase, fullpath ); MSI_SetPropertyW( package->db, OriginalDatabase, fullpath );
} }
package->script = msi_alloc_zero( sizeof(MSISCRIPT) ); package->script = msi_alloc_zero( sizeof(MSISCRIPT) );
@ -1631,7 +1629,7 @@ end:
return r; return r;
} }
static void msi_reset_folders( MSIPACKAGE *package, BOOL source ) void msi_reset_folders( MSIPACKAGE *package, BOOL source )
{ {
MSIFOLDER *folder; MSIFOLDER *folder;
@ -1650,7 +1648,7 @@ static void msi_reset_folders( MSIPACKAGE *package, BOOL source )
} }
} }
UINT MSI_SetPropertyW( MSIPACKAGE *package, LPCWSTR szName, LPCWSTR szValue) UINT MSI_SetPropertyW( MSIDATABASE *db, LPCWSTR szName, LPCWSTR szValue )
{ {
MSIQUERY *view; MSIQUERY *view;
MSIRECORD *row = NULL; MSIRECORD *row = NULL;
@ -1674,7 +1672,7 @@ UINT MSI_SetPropertyW( MSIPACKAGE *package, LPCWSTR szName, LPCWSTR szValue)
'`','_','P','r','o','p','e','r','t','y','`',' ','W','H','E','R','E',' ', '`','_','P','r','o','p','e','r','t','y','`',' ','W','H','E','R','E',' ',
'`','_','P','r','o','p','e','r','t','y','`',' ','=',' ','\'','%','s','\'',0}; '`','_','P','r','o','p','e','r','t','y','`',' ','=',' ','\'','%','s','\'',0};
TRACE("%p %s %s\n", package, debugstr_w(szName), debugstr_w(szValue)); TRACE("%p %s %s\n", db, debugstr_w(szName), debugstr_w(szValue));
if (!szName) if (!szName)
return ERROR_INVALID_PARAMETER; return ERROR_INVALID_PARAMETER;
@ -1683,7 +1681,7 @@ UINT MSI_SetPropertyW( MSIPACKAGE *package, LPCWSTR szName, LPCWSTR szValue)
if (!szName[0]) if (!szName[0])
return szValue ? ERROR_FUNCTION_FAILED : ERROR_SUCCESS; return szValue ? ERROR_FUNCTION_FAILED : ERROR_SUCCESS;
rc = MSI_GetPropertyW(package->db, szName, 0, &sz); rc = MSI_GetPropertyW(db, szName, 0, &sz);
if (!szValue || !*szValue) if (!szValue || !*szValue)
{ {
sprintfW(Query, Delete, szName); sprintfW(Query, Delete, szName);
@ -1704,7 +1702,7 @@ UINT MSI_SetPropertyW( MSIPACKAGE *package, LPCWSTR szName, LPCWSTR szValue)
MSI_RecordSetStringW(row, 2, szValue); MSI_RecordSetStringW(row, 2, szValue);
} }
rc = MSI_DatabaseOpenViewW(package->db, Query, &view); rc = MSI_DatabaseOpenViewW(db, Query, &view);
if (rc == ERROR_SUCCESS) if (rc == ERROR_SUCCESS)
{ {
rc = MSI_ViewExecute(view, row); rc = MSI_ViewExecute(view, row);
@ -1715,9 +1713,6 @@ UINT MSI_SetPropertyW( MSIPACKAGE *package, LPCWSTR szName, LPCWSTR szValue)
if (row) if (row)
msiobj_release(&row->hdr); msiobj_release(&row->hdr);
if (rc == ERROR_SUCCESS && (!lstrcmpW(szName, cszSourceDir)))
msi_reset_folders(package, TRUE);
return rc; return rc;
} }
@ -1764,7 +1759,10 @@ UINT WINAPI MsiSetPropertyW( MSIHANDLE hInstall, LPCWSTR szName, LPCWSTR szValue
return ERROR_SUCCESS; return ERROR_SUCCESS;
} }
ret = MSI_SetPropertyW( package, szName, szValue); ret = MSI_SetPropertyW( package->db, szName, szValue );
if (ret == ERROR_SUCCESS && !strcmpW( szName, cszSourceDir ))
msi_reset_folders( package, TRUE );
msiobj_release( &package->hdr ); msiobj_release( &package->hdr );
return ret; return ret;
} }

View File

@ -61,6 +61,7 @@ static void append_productcode(MSIPACKAGE* package, LPCWSTR action_property,
LPWSTR prop; LPWSTR prop;
LPWSTR newprop; LPWSTR newprop;
DWORD len; DWORD len;
UINT r;
prop = msi_dup_property(package->db, action_property ); prop = msi_dup_property(package->db, action_property );
if (prop) if (prop)
@ -87,9 +88,13 @@ static void append_productcode(MSIPACKAGE* package, LPCWSTR action_property,
newprop[0] = 0; newprop[0] = 0;
strcatW(newprop,productid); strcatW(newprop,productid);
MSI_SetPropertyW(package, action_property, newprop); r = MSI_SetPropertyW( package->db, action_property, newprop );
TRACE("Found Related Product... %s now %s\n",debugstr_w(action_property), if (r == ERROR_SUCCESS && !strcmpW( action_property, cszSourceDir ))
debugstr_w(newprop)); msi_reset_folders( package, TRUE );
TRACE("Found Related Product... %s now %s\n",
debugstr_w(action_property), debugstr_w(newprop));
msi_free( prop ); msi_free( prop );
msi_free( newprop ); msi_free( newprop );
} }