AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.01.2010, 15:01   #5  
EAlex is offline
EAlex
Участник
 
27 / 14 (1) ++
Регистрация: 30.01.2004
Попробуйте вот это.

X++:
static void shellExecuteWait(str commandLine, int _waitTime = -1, int cmdShow = 4)
{
//  Ожидание завершения работы приложения  commandLine.
    #WinAPI
    #DEFINE.STATUS_TIMEOUT(0x00000102)

    Dll             kernel32            = new Dll("kernel32.dll");
    DllFunction     createProcess       = new DllFunction(kernel32, "CreateProcessA");
    DllFunction     waitForSingleObject = new DllFunction(kernel32, "WaitForSingleObject");
    DllFunction     closeHandle         = new DllFunction(kernel32, "CloseHandle");
    DllFunction     terminateProcess    = new DllFunction(kernel32, "TerminateProcess");
    Binary          strartupInformation = new binary(68);
    Binary          processInformation  = new binary(16);

    int             hProcess;

    createProcess.returns(ExtTypes:: DWORD);
    createProcess.arg(ExtTypes:: DWORD, ExtTypes:: STRING,
                      ExtTypes:: DWORD, ExtTypes:: DWORD,
                      ExtTypes:: DWORD, ExtTypes:: DWORD,
                      ExtTypes:: DWORD, ExtTypes:: DWORD,
                      ExtTypes:: POINTER, ExtTypes:: POINTER);

    waitForSingleObject.returns(ExtTypes:: DWORD);
    waitForSingleObject.arg(ExtTypes:: DWORD, ExtTypes:: DWORD);

    closeHandle.returns(ExtTypes:: DWORD);
    closeHandle.arg(ExtTypes:: DWORD);

    terminateProcess.returns(ExtTypes:: DWord);
    terminateProcess.arg(ExtTypes:: DWord, ExtTypes:: DWord);

    strartupInformation.dWord(44, cmdShow);

    if (!createProcess.call(0, commandLine, 0, 0, 0, 0, 0, 0, strartupInformation, processInformation))
    {
        throw error(strfmt("Ошибка при запуске приложения \"%1\"", commandLine));
    }

    hProcess = processInformation.dWord(0);

    if (waitForSingleObject.call(hProcess, _waitTime) == #STATUS_TIMEOUT)
    {
        terminateProcess.call(hProcess, 1);
        throw error(strfmt("Приложение \"%1\" закрыто, так как не завершилось за отведенное ему время", commandLine));
    }

    closeHandle.call(hProcess);
}
За это сообщение автора поблагодарили: konfet (1), tricky (1).
Теги
shellexecute, winapi, запуск

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Запуск AOS DAX4 в качестве консольного приложения gl00mie DAX: Администрирование 12 05.11.2021 22:10
DAX 4.0 SP1: Запуск клиента с сети petergunn DAX: База знаний и проекты 15 27.04.2009 00:10
Запуск отчета в Dynamics AX 3.0 SP5 из внешнего приложения polygris DAX: Программирование 4 01.12.2008 12:40
Запуск Axapta 3.0 Object Server Manager в качестве консольного приложения gl00mie DAX: Администрирование 2 15.11.2007 11:12
перенос приложения kitty DAX: Администрирование 8 04.07.2006 13:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:04.