我希望能够检查已执行的应用程序的返回代码。
我尝试通过PowerBuilder函数Run实现它,但它不返回执行的应用程序代码。
感谢。
答案 0 :(得分:4)
实际上,Run()会同步启动目标,所以当下一行PowerScript运行时,Run()应用程序可能无法完成,更不用说有可用的返回代码了。您需要自己使用适当的参数进行Windows API调用才能实现此目的,而不是依赖于PowerScript包装器,它只为您提供同步选项。
以下是我必须启动DOS命令并获取返回值。您可能需要也可能不需要根据需要将参数调整为API调用。 API调用假设是PowerBuilder的Unicode版本,即10.0或更高版本。
External Function Prototypes
FUNCTION boolean CreateProcess(string AppName, string CommLine, long l1, long l2, boolean binh, long creationflags, long l3, string dir, str_startupinfo startupinfo, ref str_processinformation pi ) library 'kernel32.dll' alias for "CreateProcessW"
FUNCTION long WaitForSingleObject ( ulong ul_Notification, long lmillisecs ) library "kernel32.dll"
FUNCTION long GetExitCodeProcess(ulong hProcess,ref ulong lpExitCode) LIBRARY "kernel32.dll"
FUNCTION boolean CloseHandle(ulong h) library 'kernel32.dll'
ObjectStructure str_startupinfo
ulong cb
string lpreserved
string lpdesktop
string lptitle
ulong dwx
ulong dwy
ulong dwxsize
ulong dwysize
ulong dwxcountchars
ulong dwycountchars
ulong dwfillattribute
ulong dwflags
uint wshowwindow
uint cbreserved2
string lpreserved2
uint hstdinput
uint hstdoutput
uint hstderror
ObjectStructure str_processinformation
unsignedlong hprocess
unsignedlong hthread
long dwprocessid
long dwthreadid
function of_runandwait (string as_command, boolean ab_Visible) returns ulong
constant long STARTF_USESHOWWINDOW = 1
constant long CREATE_NEW_CONSOLE = 16
constant long NORMAL_PRIORITY_CLASS = 32
constant long INFINITE = -1
boolean lb_Return
long ll_Null, ll_CreationFlags, ll_Return
ulong lul_ProcessReturn
string ls_CurDir, ls_Null
str_StartupInfo lstr_Start
str_Processinformation lstr_PI
SetNull(ll_Null)
SetNull(ls_Null)
SetNull(ls_CurDir)
lstr_Start.cb = 72
lstr_Start.dwFlags = STARTF_USESHOWWINDOW
IF ab_Visible THEN
lstr_Start.wShowWindow = 1
ELSE
lstr_Start.wShowWindow = 0
END IF
ll_CreationFlags = CREATE_NEW_CONSOLE + NORMAL_PRIORITY_CLASS
lb_Return = CreateProcess (ls_Null, as_Command, ll_Null, ll_Null, FALSE, ll_CreationFlags, ll_Null, ls_CurDir, lstr_Start, lstr_PI)
ll_Return = WaitForSingleObject (lstr_PI.hProcess, INFINITE)
ll_Return = GetExitCodeProcess (lstr_PI.hProcess, lul_ProcessReturn)
CloseHandle(lstr_PI.hProcess)
CloseHandle(lstr_PI.hThread)
RETURN lul_ProcessReturn
祝你好运,
特里。
答案 1 :(得分:2)
OleObject wsh
integer li_rc
CONSTANT integer MAXIMIZED = 3
CONSTANT integer MINIMIZED = 2
CONSTANT integer NORMAL = 1
CONSTANT boolean WAIT = TRUE
CONSTANT boolean NOWAIT = FALSE
wsh = CREATE OleObject
li_rc = wsh.ConnectToNewObject( "WScript.Shell" )
li_rc = wsh.Run("Notepad" , NORMAL, WAIT)
messagebox("hello", "world")
第三个参数WAIT运行可执行文件并等待完成,li_rc将收到退出代码。