我正在尝试-修改-从/向远程主机发送文件。顺便说一下,这是Windows 10。
我已经将代码简化为更容易:
#include <QCoreApplication>
#include <QProcess>
bool getFile(QStringList &logTextList)
{
QProcess scp;
scp.start( "scp", QStringList() );
if( scp.waitForStarted(1000) )
{
if( scp.waitForFinished(10000) == true )
{
if( scp.exitCode() == 0 )
{
logTextList.append(scp.readAllStandardError());
return true;
}
}
else
logTextList.append("Not finished");
}
else
logTextList.append( "Not Started" );
logTextList.append( scp.readAllStandardError() );
logTextList.append( scp.readAllStandardOutput() );
logTextList.append( QString("Exitcode = %1\n").arg(scp.exitCode()) );
return false;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QStringList logTextList;
getFile(logTextList);
return a.exec();
}QProcess从不以"scp“甚至"dir”开头(记住,它是windows 10主机),而是以"cmd“或"ping”命令工作。还试图执行"cmd“并写入stdin "scp”。但是命令提示符报告说,"scp“是一个未知的命令。
编辑刚刚发现"dir“不是外部可执行文件。因此,需要在"cmd.exe“中执行。而且起作用了。但是"scp“仍然没有。
有线索吗?
提前谢谢。
发布于 2022-02-08 09:05:59
当您按名称生成进程时,将在PATH环境变量中的所有路径中搜索它,如果它不在那里,它将无法工作。
在启动应用程序之前,可以通过向PATH临时或永久添加scp路径来修复它。
也可以使用完全路径生成进程:
QString command = "scp";
#ifdef Q_OS_WIN
command = "C:\\Program Files\\Git\\usr\\bin\\scp.exe";
#endif
scp.start(command, {});或者您可以使用修改后的环境通过shell生成scp:
QProcess scp;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
QString PATH = env.value("PATH") + ";C:\\msys64\\usr\\bin;C:\\Program Files\\Git\\usr\\bin";
env.insert("PATH", PATH);
scp.setProcessEnvironment(env);
scp.start("cmd",{"/c","scp"});https://stackoverflow.com/questions/71022300
复制相似问题