Фактически, Run () запускает цель синхронно, поэтому к моменту запуска следующей строки PowerScript ваше приложение Run () может не завершиться, не говоря уже о наличии кода возврата.Для этого вам нужно самостоятельно выполнить вызовы API Windows с соответствующими параметрами, вместо того чтобы полагаться на оболочку PowerScript, которая дает вам только синхронную опцию.
Вот что мне нужно для запуска команды DOS иполучить возвращаемое значение.Вам может понадобиться или нет необходимость настраивать параметры для вызовов API соответствующим образом.Вызовы API предполагают Unicode-версию PowerBuilder, то есть 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
Удачи,
Терри.