diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2016-06-01 09:41:15 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-03-31 17:37:30 +0000 |
commit | 6ba8708a2fdec666172446783a7ff292cd454055 (patch) | |
tree | 578c23babbc6da2622efd86d7d2282f26a83c7bf /src/corelib/io/qprocess_win.cpp | |
parent | 28666d167aa8e602c0bea25ebc4d51b55005db13 (diff) |
QProcess::startDetached: support custom process environment
Starting a detached process with a custom process environment can now be
achieved by:
QProcess p;
p.setProgram("foo");
p.setProcessEnvironment(myEnv);
p.startDetached();
[ChangeLog][QtCore][QProcess] Added the ability to set a custom process
environment for detached processes.
Task-number: QTBUG-2284
Change-Id: I49406dffb64fa2aed41ea05cb271bd42eeabb729
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/io/qprocess_win.cpp')
-rw-r--r-- | src/corelib/io/qprocess_win.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp index 4699936093..6114e3d023 100644 --- a/src/corelib/io/qprocess_win.cpp +++ b/src/corelib/io/qprocess_win.cpp @@ -867,6 +867,13 @@ bool QProcessPrivate::startDetached(qint64 *pid) bool success = false; PROCESS_INFORMATION pinfo; + void *envPtr = nullptr; + QByteArray envlist; + if (environment.d.constData()) { + envlist = qt_create_environment(environment.d.constData()->hash); + envPtr = envlist.data(); + } + DWORD dwCreationFlags = (GetConsoleWindow() ? 0 : CREATE_NO_WINDOW); dwCreationFlags |= CREATE_UNICODE_ENVIRONMENT; STARTUPINFOW startupInfo = { sizeof( STARTUPINFO ), 0, 0, 0, @@ -875,7 +882,7 @@ bool QProcessPrivate::startDetached(qint64 *pid) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; success = CreateProcess(0, (wchar_t*)args.utf16(), - 0, 0, FALSE, dwCreationFlags, 0, + 0, 0, FALSE, dwCreationFlags, envPtr, workingDirectory.isEmpty() ? 0 : (wchar_t*)workingDirectory.utf16(), &startupInfo, &pinfo); @@ -885,6 +892,8 @@ bool QProcessPrivate::startDetached(qint64 *pid) if (pid) *pid = pinfo.dwProcessId; } else if (GetLastError() == errorElevationRequired) { + if (envPtr) + qWarning("QProcess: custom environment will be ignored for detached elevated process."); success = startDetachedUacPrompt(program, arguments, workingDirectory, pid); } |