diff options
Diffstat (limited to 'src/corelib/io/qprocess_win.cpp')
-rw-r--r-- | src/corelib/io/qprocess_win.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp index 80e6d5bb61..69d9ac6e87 100644 --- a/src/corelib/io/qprocess_win.cpp +++ b/src/corelib/io/qprocess_win.cpp @@ -497,11 +497,22 @@ void QProcessPrivate::startProcess() 0, 0, 0, stdinChannel.pipe[0], stdoutChannel.pipe[1], stderrChannel.pipe[1] }; - success = CreateProcess(0, (wchar_t*)args.utf16(), - 0, 0, TRUE, dwCreationFlags, - environment.isEmpty() ? 0 : envlist.data(), - workingDirectory.isEmpty() ? 0 : (wchar_t*)QDir::toNativeSeparators(workingDirectory).utf16(), - &startupInfo, pid); + + const QString nativeWorkingDirectory = QDir::toNativeSeparators(workingDirectory); + QProcess::CreateProcessArguments cpargs = { + 0, (wchar_t*)args.utf16(), + 0, 0, TRUE, dwCreationFlags, + environment.isEmpty() ? 0 : envlist.data(), + nativeWorkingDirectory.isEmpty() ? Q_NULLPTR : (wchar_t*)nativeWorkingDirectory.utf16(), + &startupInfo, pid + }; + if (modifyCreateProcessArgs) + modifyCreateProcessArgs(&cpargs); + success = CreateProcess(cpargs.applicationName, cpargs.arguments, cpargs.processAttributes, + cpargs.threadAttributes, cpargs.inheritHandles, cpargs.flags, + cpargs.environment, cpargs.currentDirectory, cpargs.startupInfo, + cpargs.processInformation); + QString errorString; if (!success) { // Capture the error string before we do CloseHandle below |