Click here to Skip to main content
Rate this: bad
Please Sign up or sign in to vote.
See more: C++/CLI
Hello everybody,
I have from my console Qt application a .bat file which calls a Windows PowerShell script file. But th exit code is always 1 instead of 0.
Here is the code:
Console App:
QFileInfo fileInf("listFiles.bat");
QStringList arguments;
arguments<< "/c"<< fileInf.absoluteFilePath()<<sFolderName;
QProcess *process = new QProcess();
exitCode = process->execute("cmd.exe ",arguments);
where sFolderName is for example D:\Work
Script listFiles.bat:
cmd.exe /c powershell.exe -noprofile -ExecutionPolicy bypass -file get_filelist_only.ps1 %1
where %1 is supposed to take the value of sFolderName.
Script get_filelist_only.ps1:

[string] $Dir
$currentLocation = $pwd
set-location $Dir
$items = gci $Dir -recurse
# retrieving the list of files
$file_items = foreach ($item in $items) {
if ($item.GetType().FullName.Equals("System.IO.FileInfo")) {
if (test-path "contents.txt")
rm "contents.txt"

function GetRelativePath($fullName)
$len = $currentPath.Length
$len = $len + $lastVersionDir.Length
$relativePath = $fullName
# writing the files
foreach ($item in $file_items)
$relativePath = GetRelativePath($item.FullName)

Out-File -Append -FilePath "contents.txt" -InputObject $relativePath -encoding ASCII

set-location $currentLocation
echo "done!"

So, in fact I am passing the directory argument from script in order to list the files of a directory in the file contents.txt
I have tried from command line cmd.exe /c listFiles.bat D:\Work and it works fine. It calls the PowerShell script and it creates the file contents.txt in D:\Work.
In fact I am arriving in a Qt function:
void QProcessPrivate::findExitCode()
    DWORD theExitCode;
    if (GetExitCodeProcess(pid->hProcess, &theExitCode)) {
        exitCode = theExitCode;
        //### for now we assume a crash if exit code is less than -1 or the magic number
        crashed = (exitCode == 0xf291 || (int)exitCode < 0);
and GetExitCodeProcess is a Windows API function.
which returns exitCode 1. I guess something is wrong with my parameters from my program because on my program console it appears the following:
D:\AutomateTest>cmd.exe /c powershell.ex
e -noprofile -ExecutionPolicy bypass -file get_filelist_only.ps1 D:/Work
'cmd.exe' is not recognized as an internal or external command,
operable program or batch file.
I don't understand what I am doing wrong. Also I have provided the full path for the cmd.exe but it does not work.
Also I have searched on google and on Qt forums but without success.
Thanks for your help.
Posted 6-Nov-12 5:14am
Edited 6-Nov-12 5:25am
Richard MacCutchan at 6-Nov-12 11:17am
The environment for the batch process must be missing part, or all, of its PATH variable. Try a different batch script that lists all environment variables to see why.
Adriana Frunza at 7-Nov-12 2:14am
Thanks a lot for your help. Indeed it was a problem of path. I had to put the entire path to cmd.exe and powershell.exe.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Advertise | Privacy | Mobile
Web03 | 2.8.150327.1 | Last Updated 6 Nov 2012
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100