Конференция "Основная" » Как запретить завершать свой приложение? [D7, Win2k, WinXP]
 
  • dreamse (19.11.07 18:42) [0]
    Пишу оболочку для ограничения запуска приложений и доступа пользователей к системным файлам.

    Смысл в том что есть программы управления ( комп. клубы) которые при окончании сеанса выгружают все запущенные приложения.

    т.е идёт метод terminated который и убивает оболочку.
    Смысл сделать невозможным убить оболочку из других программ.
    Элементарно перехватить метод Close можно поставив CanClose = false
    но смысл перехватить именно метод terminate.

    Была идея написать сервис который будет висеть в списке сервисов и загружать оболочку если её выгрузили, но программы блокировки выгружают все приложения по мере их запуска что приводит к постоянному миганию ( запуск - заверщение)

    Это не зловредный код. Если не хотите подсказать здесь свяжитесь со мной через Email покажу и проект и оболочку :)

    Жду ответов.
  • Сергей С. (19.11.07 21:32) [1]

    > есть программы управления


    > т.е идёт метод terminated


    Галиматьища несусветная.


    > Это не зловредный код


    Да хоть доброполезный)

    Логику - фтопку.
  • tesseract © (20.11.07 10:56) [2]
    Перехватывать WmCloseQuery и говорить что ни в жисть. против Kill ничего не сделаешь - это все.
  • dreamse (20.11.07 13:53) [3]
    Не нужно так утвержжать. Знаю несколько приложений которые не выгружаються при методе terminate

    > Сергей С.   (19.11.07 21:32) [1]

    Не можешь подсказать лучше промолчи
  • Сергей М. © (20.11.07 14:16) [4]

    > при методе terminate


    Методе какого объекта ?)
  • Dreamse (20.11.07 14:26) [5]
    Например другая программа хочет завершить мою программу следующем кодом :


    var
     dwResult: Longint; // This example was converted from C source.
    begin
     // Not tested. Some 'nil' assignments must be applied
     // as zero assignments in Pascal. Some vars need to
     // be declared (maxworktime, si, pi). AA.
     if CreateProcess(nil, CmdStr, nil, nil, FALSE,
       CREATE_NEW_CONSOLE, nil, nil, si, pi) then
     begin
       CloseHandle(pi.hThread);
       dwResult := WaitForSingleObject(pi.hProcess, maxworktime * 1000 * 60);
       CloseHandle(pi.hProcess);
       if dwResult <> WAIT_OBJECT_0 then
       begin
         pi.hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, pi.dwProcessId);
         if pi.hProcess <> nil then
         begin
           TerminateProcess(pi.hProcess, 0);
           CloseHandle(pi.hProcess);
         end;
       end;
     end;
    end;



    Вызываеться метод TerminateProcess который и завершает моё приложение.
    Вопрос : Как не дать завершиться моему приложению ?
  • Сергей М. © (20.11.07 14:29) [6]

    > Вызываеться метод TerminateProcess


    TerminateProcess - это не метод.


    > Как не дать завершиться моему приложению ?


    Реализовать приложение как сервис и стартовать его от имени системы.
 
Конференция "Основная" » Как запретить завершать свой приложение? [D7, Win2k, WinXP]
Есть новые Нет новых   [133935   +111][b:0][p:0.001]