Hans Leidekker : msi: Pass REINSTALL and REINSTALLMODE properties on the command line in MsiReinstallFeatureW .
Alexandre Julliard
julliard at winehq.org
Tue Dec 13 13:01:28 CST 2011
Module: wine
Branch: master
Commit: 8a5c700d786ee0490187d92c7b54eb7047ce2920
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8a5c700d786ee0490187d92c7b54eb7047ce2920
Author: Hans Leidekker <hans at codeweavers.com>
Date: Tue Dec 13 13:19:49 2011 +0100
msi: Pass REINSTALL and REINSTALLMODE properties on the command line in MsiReinstallFeatureW.
---
dlls/msi/msi.c | 24 ++++++++++++++----------
1 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c
index 09b2d36..bdcb17a 100644
--- a/dlls/msi/msi.c
+++ b/dlls/msi/msi.c
@@ -3770,14 +3770,14 @@ UINT WINAPI MsiGetShortcutTargetW( LPCWSTR szShortcutTarget,
return ERROR_FUNCTION_FAILED;
}
-UINT WINAPI MsiReinstallFeatureW( LPCWSTR szProduct, LPCWSTR szFeature,
- DWORD dwReinstallMode )
+UINT WINAPI MsiReinstallFeatureW( LPCWSTR szProduct, LPCWSTR szFeature, DWORD dwReinstallMode )
{
+ static const WCHAR fmtW[] = {'%','s','=','%','s',' ','%','s','=','%','s',0};
MSIPACKAGE *package;
MSIINSTALLCONTEXT context;
UINT r;
WCHAR sourcepath[MAX_PATH], filename[MAX_PATH], reinstallmode[11];
- LPWSTR ptr;
+ WCHAR *ptr, *cmdline;
DWORD sz;
TRACE("%s, %s, 0x%08x\n", debugstr_w(szProduct), debugstr_w(szFeature), dwReinstallMode);
@@ -3813,12 +3813,10 @@ UINT WINAPI MsiReinstallFeatureW( LPCWSTR szProduct, LPCWSTR szFeature,
sz = sizeof(sourcepath);
MsiSourceListGetInfoW( szProduct, NULL, context, MSICODE_PRODUCT,
INSTALLPROPERTY_LASTUSEDSOURCEW, sourcepath, &sz );
-
sz = sizeof(filename);
MsiSourceListGetInfoW( szProduct, NULL, context, MSICODE_PRODUCT,
INSTALLPROPERTY_PACKAGENAMEW, filename, &sz );
-
- lstrcatW( sourcepath, filename );
+ strcatW( sourcepath, filename );
if (dwReinstallMode & REINSTALLMODE_PACKAGE)
r = MSI_OpenPackageW( sourcepath, &package );
@@ -3828,12 +3826,18 @@ UINT WINAPI MsiReinstallFeatureW( LPCWSTR szProduct, LPCWSTR szFeature,
if (r != ERROR_SUCCESS)
return r;
- msi_set_property( package->db, szReinstallMode, reinstallmode );
- msi_set_property( package->db, szReinstall, szFeature );
-
- r = MSI_InstallPackage( package, sourcepath, NULL );
+ sz = (strlenW( fmtW ) + strlenW( szReinstallMode ) + strlenW( reinstallmode )) * sizeof(WCHAR);
+ sz += (strlenW( szReinstall ) + strlenW( szFeature )) * sizeof(WCHAR);
+ if (!(cmdline = msi_alloc( sz )))
+ {
+ msiobj_release( &package->hdr );
+ return ERROR_OUTOFMEMORY;
+ }
+ sprintfW( cmdline, fmtW, szReinstallMode, reinstallmode, szReinstall, szFeature );
+ r = MSI_InstallPackage( package, sourcepath, cmdline );
msiobj_release( &package->hdr );
+ msi_free( cmdline );
return r;
}
More information about the wine-cvs
mailing list