2010-04-13 19 views
6

Hace unos días, pregunté acerca de cómo obtener todos los procesos en ejecución en el sistema utilizando QProcess. me encontré con una línea de comandos que puede dar salida a todos los procesos en un archivo:obtener toda la información de procesos en ejecución usando QProcess

C: \ WINDOWS \ system32 \ wbem \ wmic.exe" /OUTPUT:C:\ProcessList.txt PROCESO llegar Leyenda

esta voluntad crear el archivo C: \ ProcessList.txt contiene todos los procesos en ejecución en el sistema. me pregunto cómo puedo ejecutarlo usando QProcess y tomar su salida a una variable

parece que cada vez que intento ejecutarlo y no leo nada sucede:

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(); 

prefiero no crear process.txt en absoluto y tomar toda la salida a una variable ...

+0

Kaycee - He votado cerrar pensando que esto no era una pregunta, pero una lectura más cercana veo que realmente es así. Mi error. –

+0

Tiene 'wmic' enviando salida a 'c: \ ProcessList.txt' y redirige la salida estándar de' wmic' a 'process.txt'. ¿Qué salida estás tratando de almacenar en una variable? –

+0

me gustaría almacenar todo el archivo de salida digamos en un mapa ... salida de archivo es la siguiente: services.exe C: \ Windows \ system32 \ services services2.exe C: \ Windows \ system32 \ servicios services3.exe C: \ Windows \ system32 \ services . . . pero por alguna razón solo se guarda la primera línea ... – kaycee

Respuesta

6

Puede ejecutar wmic.exe con el interruptor "/ OUTPUT: STDOUT" para imprimir la información del proceso directamente en stdout. Sin embargo, no pude leer esta información a través de QProcess API y guardarla en la variable. Aquí está el código utilicé:

#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; 
} 

Este código de captura con éxito la producción de "prueba/C cmd.exe eco", pero no funciona en wmic.exe. Parece que el proceso wmic.exe nunca termina, y supongo que es stdout que nunca se vacía, por lo que no se recibe nada a través de QProcess :: readAll().

Eso es toda la ayuda que puedo darle. Tal vez usted u otro usuario de SO encontrarán errores en el fragmento anterior.

2

Pruebe esto, funcionará bien.

process.start("cmd", QStringList() << "/C" << "echo" << "process" << "get" << "caption" << "|" << "wmic"); 
Cuestiones relacionadas