2012-11-24 111 views
1

我'试图调用DOS命令:substQProcessQProcess.execute()DOS命令

QProcess process; 
    int returnCode=process.execute(QString("subst " + DLetter+" "+mountPath)); 
    qDebug()<<"returnCode"<<returnCode; 
    if (returnCode==0){ 
     qDebug()<<"Mount "<<QString("subst " + DLetter+" "+mountPath) 
       <<"error"<<process.errorString()<<"id"<<process.pid(); 
     process.waitForFinished(); 
     ... 
    }else 
     qDebug()<<" mounting folder failed "<<process.errorString(); 

我的问题是:是不是足以叫​​和waitForFinished()?我安全地调用execute()而不是开始?因为我在使用start()时遇到了问题:它在所有情况下都不起作用(它用于安装,并且不用于卸载文件夹)。

任何帮助将不胜感激。

+0

我认为你需要直接调用cmd。例如:cmd/c subst X:c:\\测试 – drescherjm

+0

@drescherjm我需要从我的应用程序执行我的命令:) – Oumaya

+0

将该命令放入process.execute而不是您拥有的。 – drescherjm

回答

2

从)QProcess中的文档::执行(在http://doc.qt.digia.com/qt/qprocess.html#execute

你应该这样做:

int returnCode=process::execute(QString("subst " + DLetter+" "+mountPath)); 
qDebug()<<"returnCode"<<returnCode; 
if (returnCode==0){ 
    qDebug()<<"Mount "<<QString("subst " + DLetter+" "+mountPath) 
      <<"error"<<process.errorString()<<"id"<<process.pid(); 
}else 
    qDebug()<<" mounting folder failed "; 

的关键在于另外,QProcess ::执行是启动程序,等待一个静态成员函数为它完成然后返回进程的退出代码。

注意:我必须删除对process.waitForFinished()和process.errorString()的非静态调用,因为它们都不能从静态QProcess :: execute中工作。

+0

如果您想查看错误执行的输出,您将需要使用非静态启动。我可以看看。我在窗户上做过这个。不是用于处理和发送医疗图像,这是我日常工作的一部分。 – drescherjm

1

如果你试图调用DOS功能,请尝试使用

#include <process.h> 
... 
system("dir c:\\temp > c:\\temp\\output.txt"); 

调用它,但这是现在已经过时。尝试使用

int nRet= (int)ShellExecute(0,"open","calc.exe",0,0,SW_SHOWNORMAL); 
if (nRet <= 32) 
{ 
     DWORD dw= GetLastError(); 
     char szMsg[250]; 
     FormatMessage(
      FORMAT_MESSAGE_FROM_SYSTEM, 
      0, dw, 0, 
      szMsg, sizeof(szMsg), 
      NULL 
     ); 
     MessageBox(szMsg, "Error launching Calculator"); 
} 

请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx以了解如何使用此功能。

+1

感谢您的回复。首先,我使用'system()'来调用我的命令,但是cmd弹出并消失,我不想这样做,我想在没有弹出的情况下静默地读取它(如果有避免这种情况的选项,请让我知道),所以我用'QProcess'替换它,我会尝试'ShellExecute()'并且看看。 – Oumaya