如果directory包含exe或msi文件,请使用命令行参数启动它

时间:2014-11-29 13:47:04

标签: qt file command switch-statement exe

此应用仅适用于Windows。它将在QT Creator中构建。我使用7zip.exe作为示例,因为它非常快速且易于测试。 我有一个目录列表,每个目录包含一个*.exe*.msi文件。 在pushbutton_clicked() Qt内,我想转到我指定的单个目录,并启动该目录中的任何可执行文件或*.msi文件。 *.exe*.msi文件名将不时更改,否则我可以简单地使用系统命令。

  

系统("启动7zip \ 7zip.exe / S");

我的麻烦是因为我想运行一个通配符,例如*.exe*.msi并添加命令行开关。

我现在想要在路径中执行单个文件并添加参数/S

我在批处理文件中使用它:

for /F %%a in ('dir /b 7zip\*.exe') do SET app1=%%~na

%app1% /S

但我不确定如何在Qt中实现它。

由于

2 个答案:

答案 0 :(得分:0)

你想使用两件事:QDirIterator来迭代系统中的目录,QProcess来启动带参数的外部过程。

答案 1 :(得分:0)

感谢AlexanderVX

他们正是需要的。我确信有很多方法可以让它更优雅,但它确实完全符合我现在的要求。

    void MainWindow::on_pushButton_clicked()
{
    //set initial directory to search for the exe file
    QDirIterator file("7zip", QDirIterator::Subdirectories);
    while (file.hasNext())
    {
        file.next();
        QString prog = file.fileName(); //get actual filename
        QStringList cswitch;
        cswitch << "/S";  //create the command switch to use when running the exe
        QProcess *install = new QProcess(this);  // create new process called install
        QDir::setCurrent("7zip"); //set working directory needed to install the exe
        install->start(prog, cswitch); //launch the exe with the desired command switch
    }
}