QProcess::执行环境变量扩展字符串
QProcess::execute Environment Variables Expanded Strings
我如何让它工作:
QProcess::execute("%windir%system32SnippingTool.exe")
我假设扩展的环境变量字符串被 QProcess 忽略了。
我想我需要解析字符串并查看%
是否存在,然后获取环境变量以完成完整的字符串路径。听起来很麻烦,应该由QProcess
处理。我错过了什么吗?
提前感谢! :)
- 如果要直接使用
%windir%
,可以执行以下操作:
QProcess::execute("cmd.exe /c start /WAIT "" %windir%\system32\SnippingTool.exe");
- 否则,您可以使用例如
qgetenv("windir")
或qEnvironmentVariable("windir")
来获取Windows文件夹路径。
希望对您有所帮助。
感谢@TomKim的回答在他的答案中处理扩展的字符串,我解决了这个问题。但不幸的是,空白给我带来了其他问题,使我想出了这个解决方案,希望能帮助其他人。虽然不是最漂亮的解决方案,但它确实是我为多个平台所需要的:
void QuickCut::executeProcess(const std::string & szProc, const std::string & szArgs)
{
// QProc won't expand environment variable strings.
// Invoking using the user console will allow for expanded string to work as expected.
#ifdef Q_OS_WIN
QString szCommand = "cmd /c start "" "" + QString::fromStdString(szProc) + """;
QString szExt = ".cmd";
#elif Q_OS_UNIX
QString szCommand = "sh -c '" + QString::fromStdString(szProc) + "'";
QString szExt = ".sh";
#endif
QStringList qArgsTmp = QString::fromStdString(szArgs).trimmed().split(",");
for (auto && arg : qArgsTmp)
{
QString argTrimmed = arg.trimmed();
if (argTrimmed.isEmpty()) continue;
szCommand += " " + argTrimmed;
}
qDebug() << "[QuickCut::executeProcess] - Execute Command: " << szCommand;
QString szFilePath = applicationDirPath() + "/tempCmd" + szExt;
QFile file(szFilePath);
file.open(QIODevice::ReadWrite);
QTextStream ts(&file);
ts << szCommand;
file.close();
QProcess::execute(szFilePath);
file.remove();
}
相关文章:
- 在另一个字符串中插入文件扩展名之前的字符串
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- URL 编码扩展的 ASCII 标准::字符串在 C++.
- QProcess::执行环境变量扩展字符串
- 调试宏中的字符串变量扩展
- 如何在字符串中插入扩展的ascii字符
- 如何将宏值扩展到宽字符串
- 作为字符串 c/C++ 的宏名称扩展
- 通过添加构造函数和一些成员函数来扩展 std::(w)字符串
- 扩展字符串流错误C++
- 我可以在字符串化之前强制未定义的宏扩展吗?
- 如何使用 Boost 预处理器扩展字符串
- OMNeT++ TicToc 扩展字符串消息
- 在扩展字符串中查找第 k 个元素
- 如何从boost::wave中获取完整的、扩展的、字符串化的宏
- 需要帮助将可变宏扩展为字符串化名称和值序列
- C/C++宏扩展到参数,参数为字符串
- 在扩展中创建字符串流的日志宏
- PHP扩展如何从方法返回字符串
- 在 C++11 中,应该首先发生什么:原始字符串扩展或宏