如何在 Qt5 中执行 .cmd 填充

问题描述

如何使用此命令执行 .cmd 文件

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

/home/pi/keyboard.sh
exit 0

如何在 qt 中使用命令控制台执行此脚本?
如您所见 - 第一个命令关闭 qt 应用程序。


首先,我尝试使用 QProcess 来执行其中的所有命令。

TASKKILL /F /PID 14364
MOVE /Y "C:/Users/BBCCA/AppData/Roaming/DWAKU2\DWAKU2.exe" "D:/DWAKU2/build-    DWAKU2-Desktop_Qt_5_15_2_MinGW_64_bit_Static-Release/release"
START "" "D:/DWAKU2/build-DWAKU2-Desktop_Qt_5_15_2_MinGW_64_bit_Static-Release/release/DWAKU2.exe"

但它没有执行错误

Ошибка:Неправильный параметр или аргумент - '/Q'。 Введите "TASKKILL /?” для получения справки по использованию。

翻译:

错误:不正确的参数或参数 - '/Q'。输入“TASKKILL /?”为了 有关如何使用它的帮助。

经过大量阅读文档并询问 ru.stuckoverflow - 放弃了这个想法并尝试使用 cmd 文件
你可以在上面阅读。

这个文件的执行是:

auto programmName = QFileInfo(QCoreApplication::applicationFilePath()).fileName();
QProcess consola;
QString command = "cmd";
QStringList commandArgs;
QString subcommand1,subcommand2;
subcommand1 += "TASKKILL /IM ";
subcommand1 += programmName;
subcommand2 += "DEL /Q ";
subcommand2 += QCoreApplication::applicationFilePath();
commandArgs << "/c" << subcommand1 << "&&" << subcommand2;
qDebug() << commandArgs;
consola.startDetached(command,commandArgs);
consola.waitForFinished();

当程序执行这个文件时 - 只执行了第一个命令。
但是当我尝试通过单击它来执行此文件时 - 它工作正常....

解决方法

看看 QProcess,特别是 startDetached 方法。根据{{​​3}},“如果调用进程退出,分离的进程将继续运行,不受影响。”

    QProcess *myProcess = new QProcess();
    myProcess->setProgram("updater.cmd");
    myProcess->startDetached();