Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QProcess with powershell command still running
Forum Update on Monday, May 27th 2025

QProcess with powershell command still running

Scheduled Pinned Locked Moved Unsolved General and Desktop
qprocesspowershell
11 Posts 3 Posters 2.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    TomNow99
    wrote on last edited by
    #1

    I have a big problem with QProcess ( I use Qt c++ ). I need to execute a command with admin permissions ( windows 7 ) - netsh - I have to add exception to my firewall.

    proc->start("powershell",QStringList()<<"-Command"<<"Start-Process"<<"powershell.exe"<<"-Verb"<<"runas"<<"-ArgumentList"<<R"('here is netsh command')");
    proc->waitForStarted();
    qInfo()<<"before";
    proc->waitForFinished(-1);
    qInfo()<<"yeah!";
    When I execute my program I see only "before". What can I do? I check my netsh command in powershell - it's good. Command is still running ( I waited 3 minutes ).

    jsulmJ 1 Reply Last reply
    0
    • T TomNow99

      I have a big problem with QProcess ( I use Qt c++ ). I need to execute a command with admin permissions ( windows 7 ) - netsh - I have to add exception to my firewall.

      proc->start("powershell",QStringList()<<"-Command"<<"Start-Process"<<"powershell.exe"<<"-Verb"<<"runas"<<"-ArgumentList"<<R"('here is netsh command')");
      proc->waitForStarted();
      qInfo()<<"before";
      proc->waitForFinished(-1);
      qInfo()<<"yeah!";
      When I execute my program I see only "before". What can I do? I check my netsh command in powershell - it's good. Command is still running ( I waited 3 minutes ).

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @TomNow99 said in QProcess with powershell command still running:

      I check my netsh command in powershell - it's good

      Do you have to authenticate yourself as admin in this case?
      My guess is that the command is simply waiting for admin credentials.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      T 1 Reply Last reply
      0
      • jsulmJ jsulm

        @TomNow99 said in QProcess with powershell command still running:

        I check my netsh command in powershell - it's good

        Do you have to authenticate yourself as admin in this case?
        My guess is that the command is simply waiting for admin credentials.

        T Offline
        T Offline
        TomNow99
        wrote on last edited by
        #3

        @jsulm Thank you for answer.

        When I run this code I get a system window "user account control". When I Click accept I wait.... , when I click reject I wait.... When I close that window I wait...

        jsulmJ 1 Reply Last reply
        0
        • T TomNow99

          @jsulm Thank you for answer.

          When I run this code I get a system window "user account control". When I Click accept I wait.... , when I click reject I wait.... When I close that window I wait...

          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #4

          @TomNow99 I was actually talking about executing this command manually in powershell

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          T 1 Reply Last reply
          0
          • jsulmJ jsulm

            @TomNow99 I was actually talking about executing this command manually in powershell

            T Offline
            T Offline
            TomNow99
            wrote on last edited by
            #5

            @jsulm When I go to powershell ( no QT ) I can run this command ( netsh ). I work in my private pc, so I have only one account (main account ). When I execute this command in powershell I don't have to write password or something like that. I run this command and it's done. When I go to cmd and run this command I get message "execute as admin".

            jsulmJ 1 Reply Last reply
            0
            • T TomNow99

              @jsulm When I go to powershell ( no QT ) I can run this command ( netsh ). I work in my private pc, so I have only one account (main account ). When I execute this command in powershell I don't have to write password or something like that. I run this command and it's done. When I go to cmd and run this command I get message "execute as admin".

              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by
              #6

              @TomNow99 You should connect slots to https://doc.qt.io/qt-5/qprocess.html#readyReadStandardOutput and https://doc.qt.io/qt-5/qprocess.html#readyReadStandardError and print nout what you get. But to do so you have to remove your blocking

              proc->waitForFinished(-1);
              

              call!
              Also https://doc.qt.io/qt-5/qprocess.html#stateChanged and https://doc.qt.io/qt-5/qprocess.html#errorOccurred signals can provide more information.

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              T 1 Reply Last reply
              0
              • jsulmJ jsulm

                @TomNow99 You should connect slots to https://doc.qt.io/qt-5/qprocess.html#readyReadStandardOutput and https://doc.qt.io/qt-5/qprocess.html#readyReadStandardError and print nout what you get. But to do so you have to remove your blocking

                proc->waitForFinished(-1);
                

                call!
                Also https://doc.qt.io/qt-5/qprocess.html#stateChanged and https://doc.qt.io/qt-5/qprocess.html#errorOccurred signals can provide more information.

                T Offline
                T Offline
                TomNow99
                wrote on last edited by
                #7

                @jsulm

                I delete line: "proc->waitForFinished(-1);"

                and I add slots:

                void MainWindow::finishedslot(int p)
                {
                qInfo()<<p;
                }
                void MainWindow::stateChangedslot(QProcess::ProcessState state)
                {
                qInfo()<<state;
                }

                void MainWindow::readyReadStandardErrorslot()
                {
                QString stdOutput = proc->readAllStandardError();
                qInfo()<<stdOutput;
                }

                void MainWindow::readyReadStandardOutputslot()
                {
                QString stdOutput = proc->readAllStandardOutput();
                qInfo()<<stdOutput;
                }

                void MainWindow::errorOccurredslot(QProcess::ProcessError error)
                {
                qInfo()<<error;
                }

                Now I see informations:
                QProcess::Starting
                QProcess::Running
                before
                yeah!

                And nothing more.

                jsulmJ 1 Reply Last reply
                0
                • T TomNow99

                  @jsulm

                  I delete line: "proc->waitForFinished(-1);"

                  and I add slots:

                  void MainWindow::finishedslot(int p)
                  {
                  qInfo()<<p;
                  }
                  void MainWindow::stateChangedslot(QProcess::ProcessState state)
                  {
                  qInfo()<<state;
                  }

                  void MainWindow::readyReadStandardErrorslot()
                  {
                  QString stdOutput = proc->readAllStandardError();
                  qInfo()<<stdOutput;
                  }

                  void MainWindow::readyReadStandardOutputslot()
                  {
                  QString stdOutput = proc->readAllStandardOutput();
                  qInfo()<<stdOutput;
                  }

                  void MainWindow::errorOccurredslot(QProcess::ProcessError error)
                  {
                  qInfo()<<error;
                  }

                  Now I see informations:
                  QProcess::Starting
                  QProcess::Running
                  before
                  yeah!

                  And nothing more.

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #8

                  @TomNow99 said in QProcess with powershell command still running:

                  and I add slots

                  Just to be sure: you connected all of them to the related signals?

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  T 2 Replies Last reply
                  0
                  • jsulmJ jsulm

                    @TomNow99 said in QProcess with powershell command still running:

                    and I add slots

                    Just to be sure: you connected all of them to the related signals?

                    T Offline
                    T Offline
                    TomNow99
                    wrote on last edited by
                    #9

                    @jsulm Yes. When I bad connect signal and slot I see information below in QT. Here are my connects:

                    connect(proc, SIGNAL(finished(int)), this, SLOT(finishedslot(int)));
                    connect(proc, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(stateChangedslot(QProcess::ProcessState)));
                    connect(proc, SIGNAL(readyReadStandardError()), this, SLOT(readyReadStandardErrorslot()));
                    connect(proc, SIGNAL(readyReadStandardOutput()), this, SLOT(readyReadStandardOutputslot()));
                    connect(proc, SIGNAL(errorOccurred(QProcess::ProcessError)), this, SLOT(errorOccurredslot(QProcess::ProcessError)));

                    I connect them before proc->start().


                    When I wrote script .bat, which have only 3 commands:

                    @echo off
                    powershell -Command "& {Start-Process powershell.exe -Verb runas -ArgumentList 'netsh command here'}"
                    exit 0

                    And I run it in QT (proc->start(script.bat)) I have the same problem. But when I delete the line with powershell command:

                    @echo off
                    exit 0

                    I get message in Qt that script is done.

                    1 Reply Last reply
                    0
                    • jsulmJ jsulm

                      @TomNow99 said in QProcess with powershell command still running:

                      and I add slots

                      Just to be sure: you connected all of them to the related signals?

                      T Offline
                      T Offline
                      TomNow99
                      wrote on last edited by
                      #10

                      @jsulm When I change powershell command in QT ( or in .bat script ) to:

                      ( in QT ):
                      proc->start("powershell",QStringList()<<"-Command"<<"Start-Process"<<"powershell.exe"<<"-ArgumentList"<<R"('echo 4')");

                      I still don't get information that proc is finished.

                      Can you run this code in your computer?

                      1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        SimonSchroeder
                        wrote on last edited by
                        #11

                        The problem might be that you have two nested calls to PowerShell without exiting them. A quick search shows people reporting the inner PowerShell call (with -Verb runas) keeps the console window open. So, instead of the netsh command you might want to provide a script that has the netsh command and an exit. Or maybe you can concatenate the two directly in the -ArgumentList (I don't have much experience with PowerShell, but in Linux I could separate commands with a semicolon).

                        1 Reply Last reply
                        1

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved