wine/programs/winemenubuilder winemenubuilder.c
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Nov 8 04:55:26 CST 2005
ChangeSet ID: 21149
CVSROOT: /opt/cvs-commit
Module name: wine
Changes by: julliard at winehq.org 2005/11/08 04:55:26
Modified files:
programs/winemenubuilder: winemenubuilder.c
Log message:
Mike McCormack <mike at codeweavers.com>
Extract the executable name for msi advertised shortcuts.
Patch: http://cvs.winehq.org/patch.py?id=21149
Old revision New revision Changes Path
1.35 1.36 +29 -2 wine/programs/winemenubuilder/winemenubuilder.c
Index: wine/programs/winemenubuilder/winemenubuilder.c
diff -u -p wine/programs/winemenubuilder/winemenubuilder.c:1.35 wine/programs/winemenubuilder/winemenubuilder.c:1.36
--- wine/programs/winemenubuilder/winemenubuilder.c:1.35 8 Nov 2005 10:55:26 -0000
+++ wine/programs/winemenubuilder/winemenubuilder.c 8 Nov 2005 10:55:26 -0000
@@ -52,6 +52,7 @@
#include <shlobj.h>
#include <objidl.h>
#include <shlguid.h>
+#include <appmgmt.h>
#include "wine/unicode.h"
#include "wine/debug.h"
@@ -726,6 +727,33 @@ static BOOL GetLinkLocation( LPCWSTR lin
return FALSE;
}
+/* gets the target path directly or through MSI */
+static HRESULT get_path( IShellLinkW *sl, LPWSTR szPath, DWORD sz )
+{
+ IShellLinkDataList *dl = NULL;
+ EXP_DARWIN_LINK *dar = NULL;
+ HRESULT hr;
+
+ szPath[0] = 0;
+ hr = IShellLinkW_GetPath( sl, szPath, MAX_PATH, NULL, SLGP_RAWPATH );
+ if (hr == S_OK && szPath[0])
+ return hr;
+
+ hr = IShellLinkW_QueryInterface( sl, &IID_IShellLinkDataList, (LPVOID*) &dl );
+ if (FAILED(hr))
+ return hr;
+
+ hr = IShellLinkDataList_CopyDataBlock( dl, EXP_DARWIN_ID_SIG, (LPVOID*) &dar );
+ if (SUCCEEDED(hr))
+ {
+ CommandLineFromMsiDescriptor( dar->szwDarwinID, szPath, &sz );
+ LocalFree( dar );
+ }
+
+ IShellLinkDataList_Release( dl );
+ return hr;
+}
+
static BOOL InvokeShellLinker( IShellLinkW *sl, LPCWSTR link, BOOL bAgain )
{
char *link_name = NULL, *icon_name = NULL, *work_dir = NULL;
@@ -760,8 +788,7 @@ static BOOL InvokeShellLinker( IShellLin
IShellLinkW_GetDescription( sl, szDescription, INFOTIPSIZE );
WINE_TRACE("description: %s\n", wine_dbgstr_w(szDescription));
- szPath[0] = 0;
- IShellLinkW_GetPath( sl, szPath, MAX_PATH, NULL, SLGP_RAWPATH );
+ get_path( sl, szPath, MAX_PATH );
WINE_TRACE("path : %s\n", wine_dbgstr_w(szPath));
szArgs[0] = 0;
More information about the wine-cvs
mailing list