- Winnie Ross
- PowerBuilder
- Monday, 2 May 2022 04:41 PM UTC
I have been working with Appeon on an issue with PowerBuilder regarding the error I get shell run error when I’m combining different files together into one PDF.
Our logic calls a PDF converter. We basically run a custom PDF converted command-line utility and then calls shell to run the command. I believe this is a utility created for us by PowerBuilder when we converted our programs to PowerBuilder. Per Appeon, this something we might have received from the PB Community “at large”. I am wondering if anyone can help me with this.
On this script (Shell Run.txt), you will see the of_run function and does comparison on the "CreateProcess" thread. When I debug the program, the error fails in the else statement. I am not sure what the CreateProcess does exactly if this is a built in function or not.
// -----------------------------------------------------------------------------
// SCRIPT: u_nv_shellrunandwait.of_Run
//
// PURPOSE: This function starts the process and waits for it to
// finish. If a timeout period has been set, it
// optionally can terminate the process.
//
// ARGUMENTS: as_exefullpath - Path of program to execute
// ai_showwindow - Show window option
//
// RETURN: Return code of the program or:
// -1 = Create Process failed
// 258 = Process terminated after timeout
//
// DATE PROG/ID DESCRIPTION OF CHANGE / REASON
// ---------- -------- -----------------------------------------------------
// 07/16/2003 RolandS Initial Coding
// -----------------------------------------------------------------------------
STARTUPINFO lstr_si
PROCESS_INFORMATION lstr_pi
long ll_null, ll_CreationFlags, ll_ExitCode, ll_msecs
String ls_null
// initialize arguments
SetNull(ll_null)
SetNull(ls_null)
lstr_si.cb = 72
lstr_si.dwFlags = STARTF_USESHOWWINDOW
lstr_si.wShowWindow = al_showwindow
ll_CreationFlags = CREATE_NEW_CONSOLE + NORMAL_PRIORITY_CLASS
// create process/thread and execute the passed program
If CreateProcess(ls_null, as_exefullpath, ll_null, &
ll_null, False, ll_CreationFlags, ll_null, &
ls_null, lstr_si, lstr_pi) Then
// wait for the process to complete
If il_millsecs > 0 Then
// wait until process ends or timeout period expires
ll_ExitCode = WaitForSingleObject(lstr_pi.hProcess, il_millsecs)
// terminate process if not finished
If ib_terminate And ll_ExitCode = WAIT_TIMEOUT Then
TerminateProcess(lstr_pi.hProcess, -1)
ll_ExitCode = WAIT_TIMEOUT
Else
// check for exit code
GetExitCodeProcess(lstr_pi.hProcess, ll_ExitCode)
End If
Else
// wait until process ends
WaitForSingleObject(lstr_pi.hProcess, INFINITE)
// check for exit code
GetExitCodeProcess(lstr_pi.hProcess, ll_ExitCode)
End If
// close process and thread handles
CloseHandle(lstr_pi.hProcess)
CloseHandle(lstr_pi.hThread)
Else
// return failure
ll_ExitCode = -1
End If
Return ll_ExitCode
Thanks for your assistance.
Winnie
Find Questions by Tag
Helpful?
If a reply or comment is helpful for you, please don’t hesitate to click the Helpful button. This action is further confirmation of their invaluable contribution to the Appeon Community.