diff --git a/src/app/application.cpp b/src/app/application.cpp index aab9a9aed..dd571eab6 100644 --- a/src/app/application.cpp +++ b/src/app/application.cpp @@ -261,7 +261,12 @@ void Application::runExternalProgram(BitTorrent::TorrentHandle *const torrent) c #if defined(Q_OS_UNIX) QProcess::startDetached(QLatin1String("/bin/sh"), {QLatin1String("-c"), program}); #elif defined(Q_OS_WIN) // test cmd: `echo "%F" > "c:\ab ba.txt"` - program.prepend(QLatin1String("cmd.exe /C ")); + static const QString cmdPath = []() -> QString { + WCHAR systemPath[64] = {0}; + GetSystemDirectoryW(systemPath, sizeof(systemPath) / sizeof(WCHAR)); + return QString::fromWCharArray(systemPath) + QLatin1String("\\cmd.exe /C "); + }(); + program.prepend(cmdPath); const uint cmdMaxLength = 32768; // max length (incl. terminate char) for `lpCommandLine` in `CreateProcessW()` if ((program.size() + 1) > cmdMaxLength) { logger->addMessage(tr("Torrent: %1, run external program command too long (length > %2), execution failed.").arg(torrent->name()).arg(cmdMaxLength), Log::CRITICAL);