Handle shell link files contained in double quotes.
This commit is contained in:
parent
93eeaa417d
commit
225c8e6c57
|
@ -1048,20 +1048,45 @@ BOOL WINAPI ShellExecuteExW32 (LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfun
|
||||||
/* resolve shell shortcuts */
|
/* resolve shell shortcuts */
|
||||||
ext = PathFindExtensionW(sei_tmp.lpFile);
|
ext = PathFindExtensionW(sei_tmp.lpFile);
|
||||||
|
|
||||||
if (ext && !strcmpiW(ext, wExtLnk)) /* or check for: shell_attribs & SFGAO_LINK */
|
if (ext && !strncmpiW(ext, wExtLnk, sizeof(wExtLnk) / sizeof(WCHAR) - 1) &&
|
||||||
|
(ext[sizeof(wExtLnk) / sizeof(WCHAR) - 1] == '\0' ||
|
||||||
|
(sei_tmp.lpFile[0] == '"' && ext[sizeof(wExtLnk) / sizeof(WCHAR) - 1] == '"'))) /* or check for: shell_attribs & SFGAO_LINK */
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
BOOL Quoted;
|
||||||
|
|
||||||
|
if (wszApplicationName[0] == '"')
|
||||||
|
{
|
||||||
|
if (wszApplicationName[strlenW(wszApplicationName) - 1] == '"')
|
||||||
|
{
|
||||||
|
wszApplicationName[strlenW(wszApplicationName) - 1] = '\0';
|
||||||
|
Quoted = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Quoted = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Quoted = FALSE;
|
||||||
|
}
|
||||||
/* expand paths before reading shell link */
|
/* expand paths before reading shell link */
|
||||||
if (ExpandEnvironmentStringsW(sei_tmp.lpFile, buffer, MAX_PATH))
|
if (ExpandEnvironmentStringsW(Quoted ? sei_tmp.lpFile + 1 : sei_tmp.lpFile, buffer, MAX_PATH))
|
||||||
lstrcpyW(wszApplicationName/*sei_tmp.lpFile*/, buffer);
|
lstrcpyW(Quoted ? wszApplicationName + 1 : wszApplicationName/*sei_tmp.lpFile*/, buffer);
|
||||||
|
|
||||||
if (*sei_tmp.lpParameters)
|
if (*sei_tmp.lpParameters)
|
||||||
if (ExpandEnvironmentStringsW(sei_tmp.lpParameters, buffer, MAX_PATH))
|
if (ExpandEnvironmentStringsW(sei_tmp.lpParameters, buffer, MAX_PATH))
|
||||||
lstrcpyW(wszParameters/*sei_tmp.lpParameters*/, buffer);
|
lstrcpyW(wszParameters/*sei_tmp.lpParameters*/, buffer);
|
||||||
|
|
||||||
hr = SHELL_ResolveShortCutW((LPWSTR)sei_tmp.lpFile, (LPWSTR)sei_tmp.lpParameters, (LPWSTR)sei_tmp.lpDirectory,
|
hr = SHELL_ResolveShortCutW((LPWSTR)(Quoted ? sei_tmp.lpFile + 1 : sei_tmp.lpFile),
|
||||||
sei_tmp.hwnd, sei_tmp.lpVerb?sei_tmp.lpVerb:wszEmpty, &sei_tmp.nShow, (LPITEMIDLIST*)&sei_tmp.lpIDList);
|
(LPWSTR)sei_tmp.lpParameters, (LPWSTR)sei_tmp.lpDirectory,
|
||||||
|
sei_tmp.hwnd, sei_tmp.lpVerb?sei_tmp.lpVerb:wszEmpty, &sei_tmp.nShow, (LPITEMIDLIST*)&sei_tmp.lpIDList);
|
||||||
|
if (Quoted)
|
||||||
|
{
|
||||||
|
wszApplicationName[strlenW(wszApplicationName) + 1] = '\0';
|
||||||
|
wszApplicationName[strlenW(wszApplicationName)] = '"';
|
||||||
|
}
|
||||||
|
|
||||||
if (sei->lpIDList)
|
if (sei->lpIDList)
|
||||||
sei->fMask |= SEE_MASK_IDLIST;
|
sei->fMask |= SEE_MASK_IDLIST;
|
||||||
|
|
Loading…
Reference in New Issue