![]() |
#20 |
Участник
|
Вот несколько измененная функция запуска приложения.
Возвращает текст, выданный запускаемым приложением, получаемый с консоли. Может быть полезно при запуске консольных утилит, возвращающих результат исполнения (или ошибки) выводом на экран. (например zip, rar и так далее). Кроме того может управлять временем ожидания выполнения приложения. При превышении времени приложение будет принудительно завершено. Может работать при запуске и на клиенте, и на сервере (написана для ax2009, для ax4 тоже должна работать). Может быть пригодится кому - нибудь... Например, при запуске: X++: static void test(Args _args) { ; info(winapiserver::shellExecuteWaitInfo("cmd", "dir")); } Цитата:
Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp. C:\WINDOWS\system32> X++: static server str shellExecuteWaitInfo(str _commandLine, str _arguments = "", int _waitTime = -1) { System.String outputInfo; System.IO.StreamReader streamReader; System.Diagnostics.Process process; System.Diagnostics.ProcessStartInfo startInfo; InteropPermission permission = new InteropPermission(InteropKind::ClrInterop); System.Exception exception; Boolean exited; System.Text.Encoding encoding; System.Text.Encoding encoding866; System.Text.Encoding encodingUTF; System.Byte[] tmp; str ret; ; permission.assert(); encodingUTF = System.Text.Encoding::get_Unicode(); encoding866 = System.Text.Encoding::GetEncoding(866); startInfo = new System.Diagnostics.ProcessStartInfo(_commandLine); process = new System.Diagnostics.Process(); if (_arguments) { startInfo.set_Arguments(_arguments); } try { startInfo.set_UseShellExecute(false); // для отключения диалога безопасности доступа к сетевым файлам startInfo.set_RedirectStandardOutput(true); process.set_StartInfo(startInfo); process.Start(); streamReader = process.get_StandardOutput(); encoding = streamReader.get_CurrentEncoding(); outputInfo = streamReader.ReadToEnd(); process.WaitForExit(_waitTime); exited = process.get_HasExited(); if (exited == false) { process.Kill(); return ""; } tmp = encoding.GetBytes(outputInfo); tmp = System.Text.Encoding::Convert(encoding866, encodingUTF, tmp); ret = encodingUTF.GetString(tmp); if (ret) return ret; return "ok"; } catch (Exception::CLRError) { exception = CLRInterop::getLastException(); while (exception) { error(exception.get_Message()); exception = exception.get_InnerException(); } return ""; } } |
|
|
За это сообщение автора поблагодарили: konfet (1). |
Теги |
64-bit, aos, ax2009, dllfunction, winapi, zip |
|
|