wine/dlls/shell32 shelllink.c
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Nov 4 05:15:33 CST 2005
ChangeSet ID: 21108
CVSROOT: /opt/cvs-commit
Module name: wine
Changes by: julliard at winehq.org 2005/11/04 05:15:33
Modified files:
dlls/shell32 : shelllink.c
Log message:
Mike McCormack <mike at codeweavers.com>
Use advapi32.CommandLineFromMsiDescriptor to get msi component paths.
Patch: http://cvs.winehq.org/patch.py?id=21108
Old revision New revision Changes Path
1.110 1.111 +14 -38 wine/dlls/shell32/shelllink.c
Index: wine/dlls/shell32/shelllink.c
diff -u -p wine/dlls/shell32/shelllink.c:1.110 wine/dlls/shell32/shelllink.c:1.111
--- wine/dlls/shell32/shelllink.c:1.110 4 Nov 2005 11:15:33 -0000
+++ wine/dlls/shell32/shelllink.c 4 Nov 2005 11:15:33 -0000
@@ -52,6 +52,7 @@
#include "shlguid.h"
#include "shlwapi.h"
#include "msi.h"
+#include "appmgmt.h"
#include "initguid.h"
@@ -2413,50 +2414,25 @@ ShellLink_QueryContextMenu( IContextMenu
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, id );
}
-static LPWSTR shelllink_get_msi_component_path( LPCWSTR component )
+static LPWSTR
+shelllink_get_msi_component_path( LPWSTR component )
{
- UINT (WINAPI *pMsiDecomposeDescriptorW)(LPCWSTR,LPWSTR,LPWSTR,LPWSTR,DWORD*);
- INSTALLSTATE (WINAPI *pMsiGetComponentPathW)(LPCWSTR,LPCWSTR,LPWSTR,DWORD*);
- WCHAR szProd[MAX_FEATURE_CHARS+1], szFeat[MAX_FEATURE_CHARS+1],
- szComp[MAX_FEATURE_CHARS+1], szCompPath[MAX_PATH];
- INSTALLSTATE state;
LPWSTR path = NULL;
- HMODULE hmsi = NULL;
- DWORD sz = 0;
- UINT ret;
+ DWORD r, sz = 0;
- TRACE("%s\n", debugstr_w( component ) );
-
- hmsi = LoadLibraryA("msi");
- if (!hmsi)
- goto end;
-
- pMsiDecomposeDescriptorW = (LPVOID) GetProcAddress(hmsi, "MsiDecomposeDescriptorW");
- pMsiGetComponentPathW = (LPVOID) GetProcAddress(hmsi, "MsiGetComponentPathW");
- if (!pMsiDecomposeDescriptorW || !pMsiGetComponentPathW)
- goto end;
-
- ret = pMsiDecomposeDescriptorW( component, szProd, szFeat, szComp, &sz );
- if (ret != ERROR_SUCCESS)
+ r = CommandLineFromMsiDescriptor( component, NULL, &sz );
+ if (r != ERROR_SUCCESS)
+ return path;
+
+ sz++;
+ path = HeapAlloc( GetProcessHeap(), 0, sz*sizeof(WCHAR) );
+ r = CommandLineFromMsiDescriptor( component, path, &sz );
+ if (r != ERROR_SUCCESS)
{
- ERR("failed to decompose descriptor %s\n", debugstr_w( component ) );
- goto end;
+ HeapFree( GetProcessHeap(), 0, path );
+ path = NULL;
}
- sz = MAX_PATH;
- state = pMsiGetComponentPathW( szProd, szComp, szCompPath, &sz );
- if (state != INSTALLSTATE_LOCAL)
- {
- ERR("MsiGetComponentPathW failed with error %d\n", ret );
- goto end;
- }
-
- path = strdupW( szCompPath );
-
-end:
- if (hmsi)
- FreeLibrary( hmsi );
-
TRACE("returning %s\n", debugstr_w( path ) );
return path;
More information about the wine-cvs
mailing list