Implement MsiOpenProductW
Mike McCormack
mike at codeweavers.com
Tue Nov 4 01:27:11 CST 2003
ChangeLog:
* Implement MsiOpenProductW
-------------- next part --------------
Index: dlls/msi/msi.c
===================================================================
RCS file: /home/wine/wine/dlls/msi/msi.c,v
retrieving revision 1.6
diff -u -r1.6 msi.c
--- dlls/msi/msi.c 30 Oct 2003 22:47:42 -0000 1.6
+++ dlls/msi/msi.c 4 Nov 2003 07:22:56 -0000
@@ -245,8 +245,57 @@
UINT WINAPI MsiOpenProductW(LPCWSTR szProduct, MSIHANDLE *phProduct)
{
- FIXME("%s %p\n",debugstr_w(szProduct), phProduct);
- return ERROR_CALL_NOT_IMPLEMENTED;
+ const WCHAR szKey[] = {
+ 'S','o','f','t','w','a','r','e','\\',
+ 'M','i','c','r','o','s','o','f','t','\\',
+ 'W','i','n','d','o','w','s','\\',
+ 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
+ 'U','n','i','n','s','t','a','l','l',0 };
+ const WCHAR szLocalPackage[] = {
+ 'L','o','c','a','l','P','a','c','k','a','g','e', 0
+ };
+ LPWSTR path = NULL;
+ UINT r;
+ HKEY hKeyProduct = NULL, hKeyUninstall = NULL;
+ DWORD count, type;
+
+ TRACE("%s %p\n",debugstr_w(szProduct), phProduct);
+
+ r = RegOpenKeyW( HKEY_LOCAL_MACHINE, szKey, &hKeyUninstall );
+ if( r != ERROR_SUCCESS )
+ return r;
+
+ r = RegOpenKeyW( hKeyUninstall, szProduct, &hKeyProduct );
+ if( r != ERROR_SUCCESS )
+ goto end;
+
+ /* find the size of the path */
+ type = count = 0;
+ r = RegQueryValueExW( hKeyProduct, szLocalPackage,
+ NULL, &type, NULL, &count );
+ if( r != ERROR_SUCCESS )
+ goto end;
+
+ /* now alloc and fetch the path of the database to open */
+ path = HeapAlloc( GetProcessHeap(), 0, count );
+ if( !path )
+ goto end;
+
+ r = RegQueryValueExW( hKeyProduct, szLocalPackage,
+ NULL, &type, (LPBYTE) path, &count );
+ if( r != ERROR_SUCCESS )
+ goto end;
+
+ r = MsiOpenPackageW( path, phProduct );
+
+end:
+ if( path )
+ HeapFree( GetProcessHeap(), 0, path );
+ if( hKeyProduct )
+ RegCloseKey( hKeyProduct );
+ RegCloseKey( hKeyUninstall );
+
+ return r;
}
UINT WINAPI MsiOpenPackageA(LPCSTR szPackage, MSIHANDLE *phPackage)
More information about the wine-patches
mailing list