Windows QPA/Services: Do not invoke MailToProtocolHandler of url.dll

As of Windows 10, MailToProtocolHandler is set as handler for
mailto URLs if there is no mail client installed. As it silently fails
or brings up a broken dialog after a long time, exclude it and
fall back to ShellExecute() which brings up the URL assocation dialog.

Task-number: QTBUG-57816
Change-Id: Ia8c09676bc44848e0549c06c3a82c9b5cce79279
Reviewed-by: Jesus Fernandez <Jesus.Fernandez@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
bb10
Friedemann Kleint 2017-01-03 09:40:40 +01:00
parent 1ebd23a670
commit b07a06745e
1 changed files with 5 additions and 1 deletions

View File

@ -98,7 +98,11 @@ static inline QString mailCommand()
RegQueryValueEx(handle, L"", 0, 0, reinterpret_cast<unsigned char*>(command), &bufferSize);
RegCloseKey(handle);
}
if (!command[0])
// QTBUG-57816: As of Windows 10, if there is no mail client installed, an entry like
// "rundll32.exe .. url.dll,MailToProtocolHandler %l" is returned. Launching it
// silently fails or brings up a broken dialog after a long time, so exclude it and
// fall back to ShellExecute() which brings up the URL assocation dialog.
if (!command[0] || wcsstr(command, L",MailToProtocolHandler") != nullptr)
return QString();
wchar_t expandedCommand[MAX_PATH] = {0};
return ExpandEnvironmentStrings(command, expandedCommand, MAX_PATH) ?