他のアプリを起動する必要がある Windows QT アプリを作成しています。次のウィンドウ呼び出しを使用すると、すべて正常に動作します。
QString qsExePath = "C:\\Program Files (x86)\\Some Company\\SomeApp.exe";
QString qsCommandLine = "";
DWORD dwLastError = 0;
STARTUPINFO startupInfo;
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = (WORD)1;
PROCESS_INFORMATION processInfo;
ZeroMemory(&processInfo, sizeof(processInfo));
if (CreateProcess((TCHAR*)(qsExePath.utf16()), (TCHAR*)(qsCommandLine.utf16()),
NULL, NULL, FALSE, 0, NULL, NULL,
&startupInfo, &processInfo))
{
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
else
{
dwLastError = GetLastError();
}
ただし、次の QT 呼び出しを使用すると機能せず、QProcess::Unknown エラーで失敗します。
QProcess process;
bool bStarted = process.startDetached(qsExePath);
qDebug() << process.error();
SomeApp.exe を %TMP% ディレクトリにコピーし、それに応じて qsExePath を変更すれば、QProcess を動作させることができます。これは明らかに何らかの権限エラーです。理由はわかりませんが...それが本当にアクセス許可である場合、CreateProcessウィンドウの呼び出しは失敗するべきではありませんか?