winemenubuilder: Use 'start.exe' to launch non .exe files.
This commit is contained in:
parent
4ef6043a57
commit
6a6f1f48d6
|
@ -897,6 +897,8 @@ static HRESULT get_cmdline( IShellLinkW *sl, LPWSTR szPath, DWORD pathSize,
|
||||||
|
|
||||||
static BOOL InvokeShellLinker( IShellLinkW *sl, LPCWSTR link, BOOL bAgain )
|
static BOOL InvokeShellLinker( IShellLinkW *sl, LPCWSTR link, BOOL bAgain )
|
||||||
{
|
{
|
||||||
|
static const WCHAR startW[] = {'\\','c','o','m','m','a','n','d',
|
||||||
|
'\\','s','t','a','r','t','.','e','x','e',0};
|
||||||
char *link_name = NULL, *icon_name = NULL, *work_dir = NULL;
|
char *link_name = NULL, *icon_name = NULL, *work_dir = NULL;
|
||||||
char *escaped_path = NULL, *escaped_args = NULL, *escaped_description = NULL;
|
char *escaped_path = NULL, *escaped_args = NULL, *escaped_description = NULL;
|
||||||
WCHAR szDescription[INFOTIPSIZE], szPath[MAX_PATH], szWorkDir[MAX_PATH];
|
WCHAR szDescription[INFOTIPSIZE], szPath[MAX_PATH], szWorkDir[MAX_PATH];
|
||||||
|
@ -970,9 +972,28 @@ static BOOL InvokeShellLinker( IShellLinkW *sl, LPCWSTR link, BOOL bAgain )
|
||||||
WCHAR *p;
|
WCHAR *p;
|
||||||
|
|
||||||
/* check for .exe extension */
|
/* check for .exe extension */
|
||||||
if (!(p = strrchrW( szPath, '.' ))) return FALSE;
|
if (!(p = strrchrW( szPath, '.' )) ||
|
||||||
if (strchrW( p, '\\' ) || strchrW( p, '/' )) return FALSE;
|
strchrW( p, '\\' ) || strchrW( p, '/' ) ||
|
||||||
if (lstrcmpiW( p, exeW )) return FALSE;
|
lstrcmpiW( p, exeW ))
|
||||||
|
{
|
||||||
|
/* Not .exe - use 'start.exe' to launch this file */
|
||||||
|
p = szArgs + lstrlenW(szPath) + 2;
|
||||||
|
if (szArgs[0])
|
||||||
|
{
|
||||||
|
p[0] = ' ';
|
||||||
|
memmove( p+1, szArgs, min( (lstrlenW(szArgs) + 1) * sizeof(szArgs[0]),
|
||||||
|
sizeof(szArgs) - (p + 1 - szArgs) * sizeof(szArgs[0]) ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
p[0] = 0;
|
||||||
|
|
||||||
|
szArgs[0] = '"';
|
||||||
|
lstrcpyW(szArgs + 1, szPath);
|
||||||
|
p[-1] = '"';
|
||||||
|
|
||||||
|
GetWindowsDirectoryW(szPath, MAX_PATH);
|
||||||
|
lstrcatW(szPath, startW);
|
||||||
|
}
|
||||||
|
|
||||||
/* convert app working dir */
|
/* convert app working dir */
|
||||||
if (szWorkDir[0])
|
if (szWorkDir[0])
|
||||||
|
@ -980,10 +1001,6 @@ static BOOL InvokeShellLinker( IShellLinkW *sl, LPCWSTR link, BOOL bAgain )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
static const WCHAR startW[] = {
|
|
||||||
'\\','c','o','m','m','a','n','d',
|
|
||||||
'\\','s','t','a','r','t','.','e','x','e',0};
|
|
||||||
|
|
||||||
/* if there's no path... try run the link itself */
|
/* if there's no path... try run the link itself */
|
||||||
lstrcpynW(szArgs, link, MAX_PATH);
|
lstrcpynW(szArgs, link, MAX_PATH);
|
||||||
GetWindowsDirectoryW(szPath, MAX_PATH);
|
GetWindowsDirectoryW(szPath, MAX_PATH);
|
||||||
|
|
Loading…
Reference in New Issue