Index: win32/shell32/shlexec.cpp =================================================================== --- win32/shell32/shlexec.cpp (revision 72542) +++ win32/shell32/shlexec.cpp (working copy) @@ -1868,18 +1868,18 @@ } else /* or expand environment strings (not both!) */ { - len = ExpandEnvironmentStringsW(sei_tmp.lpFile, NULL, 0); - if (len > 0) + LPWSTR buf; + + len = (dwApplicationNameLen > MAX_PATH) ? dwApplicationNameLen : MAX_PATH + 1; + buf = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + + strcpyW(buf, wszApplicationName); + + if (PathFindOnPathW(buf, &sei_tmp.lpDirectory)) { - LPWSTR buf; - buf = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR)); - - ExpandEnvironmentStringsW(sei_tmp.lpFile, buf, len + 1); HeapFree(GetProcessHeap(), 0, wszApplicationName); - dwApplicationNameLen = len + 1; + dwApplicationNameLen = lstrlenW(buf) + 1; wszApplicationName = buf; - /* appKnownSingular unmodified */ - sei_tmp.lpFile = wszApplicationName; } }