使用QProcess调用Windows start启动Notepad++失败问题咨询
QProcess调用
start notepad++ file.txt报错FailedToStart的解决办法 我来帮你排查这个问题~你在终端里执行start notepad++ file.txt正常,但用QProcess就报错,核心原因是:start是Windows CMD的内置命令,不是一个独立的可执行程序,QProcess的start()方法默认会去寻找一个可执行文件来启动,它找不到start.exe,所以就触发了FailedToStart错误。
给你两种可行的解决方法:
方法一:通过CMD执行start命令
既然start是CMD的内置命令,那我们可以直接调用cmd.exe,把start相关的命令作为参数传递进去:
修改你代码里的启动部分:
// 替换原来的process->start("start", { "notepad++", "file.txt" }); process->start("cmd.exe", {"/c", "start notepad++ file.txt"});
这里的/c参数是告诉CMD:执行完后面的命令后就退出,这样QProcess能正确处理后续的finished信号。
方法二:直接启动Notepad++(更推荐)
如果Notepad已经添加到系统环境变量PATH中,或者你知道它的完整安装路径,直接启动Notepad的可执行文件会更直接,不需要经过CMD中转:
// 如果Notepad++在PATH里,直接这样写 process->start("notepad++", {"file.txt"}); // 如果你知道完整路径,比如: // process->start("C:/Program Files/Notepad++/notepad++.exe", {"file.txt"});
这种方式更高效,也避免了和CMD相关的参数问题。
你的原代码参考
QProcess* process = new QProcess; QObject::connect(process, &QProcess::errorOccurred, this, [process](QProcess::ProcessError e) { qDebug() << process->errorString(); qDebug() << e; }); QObject::connect(process, qOverload<int, QProcess::ExitStatus>(&QProcess::finished), this, [process](int exitcode, QProcess::ExitStatus) { if(exitcode != 0) qDebug() << process->readAllStandardError(); process->deleteLater(); }); // 原来的错误调用 // process->start("start", { "notepad++", "file.txt" });
内容的提问来源于stack exchange,提问作者Fausto01
相关产品推荐
相关产品推荐

