2010-04-13 8 views
6

'u kullanarak tüm çalışan işlemler bilgisini birkaç gün önce QProcess kullanarak sistemdeki tüm çalışan süreçleri nasıl alacağımı sordum. i çıkış can bir komut satırı bulunan bir dosyaya tüm süreçler:QProcess

C: \ WINDOWS \ system32 \ wbem \ /OUTPUT:C:\ProcessList.txt SÜRECİ

yazısı olsun "WMIC.exe Bu irade C: \ ProcessList.txt dosyası oluşturmak, sistemdeki tüm çalışan işlemleri içerir QProcess kullanarak nasıl çalıştırabilir ve çıkışını bir değişkene alabilir miyim?

Her seferinde onu çalıştırmaya çalıştığımda olur:

İşlem.txt dosyasını oluşturmamayı ve tüm çıktıları bir değişkene dönüştürmemeyi tercih ediyorum ...

+0

Kaycee - Ben bunun bir soru olmadığını düşünmek için oy kullandım, ama daha yakından okuduğumu görüyorum. Benim hatam. –

+0

'w: 'c: \ ProcessList.txt' için çıktı gönderiyor ve' wmic''in standart çıktısını' process.txt' olarak yeniden yönlendiriyorsunuz. Bir değişkende hangi çıktıyı depolamaya çalışıyorsunuz? –

+0

Tüm dosya çıktısını saklamak istiyorum bir haritada söyleyelim ... dosya çıkışı aşağıdaki gibidir: services.exe C: \ Windows \ system32 \ services services2.exe C: \ Windows \ system32 \ hizmetleri services3.exe C: \ Windows \ system32 \ services . . . Bazı nedenlerden dolayı yalnızca ilk satır kaydediliyor ... – kaycee

cevap

6

İşlem bilgisini doğrudan stdout'a yazdırmak için wmic.exe dosyasını "/ OUTPUT: STDOUT" anahtarıyla çalıştırabilirsiniz. Ancak, bu bilgiyi QProcess API aracılığıyla okuyamadı ve değişkene kaydedemedim. İşte kullandığım kod:

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

Bu kodu başarıyla "cmd.exe/C yankı testi" nin çıkışını yakalayan, ancak WMIC.exe üzerinde çalışmaz. İşlem wmic.exe hiç bitmez gibi görünüyor ve sanırım stdout asla temizlendi asla QProcess :: readAll().

Size verebileceğim her şey budur. Belki siz veya başka bir SO kullanıcısı yukarıdaki snippet'te bir hata bulursunuz.

2

Bunu iyi çalışacağını deneyin.

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