Frage

Vor einigen Tagen uns gefragt, wie alle laufenden Prozesse im System erhalten mit QProcess. Ich fand eine Befehlszeile, die ausgeben kann alle Prozesse in einer Datei:

C: \ WINDOWS \ system32 \ wbem \ wmic.exe“/OUTPUT:C:\ProcessList.txt PROCESS Bildunterschrift bekommen

das wird erstellen C: \ ProcessList.txt-Datei enthält alle laufenden Prozesse im System. Ich frage mich, wie kann ich es mit QProcess ausführen und seine Ausgabe an eine Variable übernehmen.

es scheint, jedes Mal, wenn ich versuche, es zu laufen und liest nichts passiert:

QString program = "C:\\WINDOWS\\system32\\wbem\\wmic.exe";
QStringList arguments;
arguments << "/OUTPUT:C:\\ProcessList.txt" <<"PROCESS"<< "get"<< "Caption";

process->setStandardOutputFile("process.txt");
process->start(program,arguments);

QByteArray result = process->readAll();

ziehe ich es nicht Process.txt überhaupt zu schaffen und alle die Ausgabe in eine Variable ...

nehmen
War es hilfreich?

Lösung

Sie können wmic.exe mit run "/ OUTPUT: STDOUT" Schalter, um die Prozess-Info direkt auf die Standardausgabe zu drucken. Allerdings war ich nicht in der Lage diese Informationen durch QProcess API zu lesen und es in Variablen speichern. Hier ist der Code, den ich verwendet:

#include <QtCore/QCoreApplication>
#include <QProcess>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QProcess process;
    process.setReadChannel(QProcess::StandardOutput);
    process.setReadChannelMode(QProcess::MergedChannels);
//    process.start("cmd.exe /C echo test");
    process.start("wmic.exe /OUTPUT:STDOUT PROCESS get Caption");

    process.waitForStarted(1000);
    process.waitForFinished(1000);

    QByteArray list = process.readAll();
    qDebug() << "Read" << list.length() << "bytes";
    qDebug() << list;
}

Dieser Code fängt erfolgreich Ausgabe von "cmd.exe / C Echo-Test", aber nicht die Arbeit an wmic.exe. Es scheint, dass Prozess wmic.exe nie fertig ist, und ich, dass es stdout nehme nie gespült wird, so dass Sie nichts Throught QProcess :: ReadAll erhalten haben ().

Das ist alles, Hilfe, die ich Ihnen geben kann. Vielleicht werden Sie oder ein andere SO Benutzer Fehler im Code-Schnipsel oben finden.

Andere Tipps

Versuchen Sie, diese wird es gut funktionieren.

process.start("cmd", QStringList() << "/C" << "echo" << "process" << "get" << "caption" << "|" << "wmic");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top