2. Процес
Процес - це програма, що виконується. Формально
процес визначається як концепція рівня операційної
системи, яка використовується для опису набору
ресурсів (таких як зовнішні бібліотеки коду і головний
потік) і необхідної пам'яті, що виділяється
виконуваним додаткам.
Для кожного завантаженого в пам'ять файлу *.exe
операційна система створює окремий ізольований
процес, який застосовується протягом усього часу
життя.
Andrii Hladkyi
trilobt@gmail.com 2
3. Процес
Дані одного процесу не доступні безпосередньо іншим
процесам, якщо тільки не використовується API-
інтерфейс для програмування розподілених обчислень,
подібний Windows Communication Foundation. З
урахуванням цих моментів, процес можна розглядати
як фіксовану і безпечну границю для виконуваних
додатків.
Кожному процесу Windows призначається унікальний
ідентифікатор процесу (process identifier - PID) і він
може незалежно завантажуватися і вивантажуватися
операційною системою при необхідності (а також і
програмно).
Andrii Hladkyi
trilobt@gmail.com 3
4. Взаємодія з процесами в .NET
В просторі імен Sуstem.Diagnostiсs визначено кілька
типів, які дозволяють програмно взаємодіяти з
процесами.
Andrii Hladkyi
trilobt@gmail.com 4
Тип Опис
Process Цей клас надає доступ до локальних і віддалених
процесів, а також дозволяє програмно запускати і
зупиняти процеси
ProcessModule Цей тип представляє модуль (*.dll або *.exe),
завантажений в певний процес. Важливо розуміти,
що тип ProcessModule може представляти будь-який
модуль, тобто двійкові збірки на основі COM, .NET
або традиційного ‘C’
ProcessModuleCollection Цей тип надає строго типізовану колекцію об'єктів
Process Module
5. Взаємодія з процесами в .NET
Andrii Hladkyi
trilobt@gmail.com 5
Тип Опис
ProcessStartInfo Цей тип дозволяє вказувати набір значень, які
використовуються при запуску процесу за
допомогою методу Process.Start ()
ProcessThread Цей тип являє потік в заданому процесі. Слід мати
на увазі, що тип ProcessThread застосовується для
діагностики набору потоків процесу, але не для
породження нових потоків виконання всередині
процесу
ProcessThreadCollection Цей тип надає строго типізовану колекцію об'єктів
ProcessThread
6. Основні методи класу Process
Andrii Hladkyi
trilobt@gmail.com 6
Метод Опис
CloseMainWindow() Цей метод закриває процес, який має
користувацький інтерфейс, відправляючи його
головному вікні повідомлення про закриття
GetCurrentProcess() Цей статичний метод повертає новий об'єкт Process,
що представляє процес, який є активним в поточний
момент
GetProcesses() Цей статичний метод повертає масив нових об'єктів
Process, які виконуються на заданій машині
Kill() Цей метод негайно зупиняє заданий процес
Start() Цей метод запускає процес
7. Домени додатків
Домени додатків (Application Domain - AppDomain) -
це логічні підрозділи всередині окремого процесу, в
якому розміщується набір пов'язаних збірок .NET.
Кожен домен додатка, в свою чергу, ділиться на
контекстні границі які використовуються для
групування разом подібних об'єктів .NET.
Поняття контексту дозволяє середовищі CLR
забезпечувати належну обробку об'єктів з особливими
потребами часу виконання.
Один процес може містити кілька доменів додатків,
кожен з яких обслуговує свій виконуваний файл .NET.
Andrii Hladkyi
trilobt@gmail.com 7
8. Домени додатків
Таке додаткове розділення традиційного процесу
Windows надає ряд переваг:
Домени додатків є ключовим аспектом нейтральної, по
відношенню до операційних систем, природи платформи .NET
Домени додатків набагато менше використовують
обчислювальних ресурсів і пам'яті в порівнянні з
повноцінними процесами. Завдяки цьому середовище CLR
здатне завантажувати і вивантажувати домени додатків
набагато швидше, ніж формальні процеси, тим самим значно
покращуючи масштабованість серверних додатків.
Домени додатків забезпечують більш глибокий рівень ізоляції
при розміщенні завантажених додатків. У разі збою одного
домена додатку всередині процесу інші домени додатків
залишаються працездатними
Andrii Hladkyi
trilobt@gmail.com 8
9. Домени додатків
З огляду на цей факт, дуже важливо розуміти, що
додаток, що виконується в одному домені додатку, не
може отримувати дані з іншого домену додатка, якщо
тільки не буде використовуватися протокол
розподіленого програмування (такий як WCF).
Процес операційної системи буде обслуговувати так
званий стандартний домен додатка.
Цей специфічний домен додатка створюється
автоматично середовищем CLR під час запуску
процесу.
Після цього середовище CLR створює додаткові
домени додатків в міру необхідності.
Andrii Hladkyi
trilobt@gmail.com 9
10. Клас System.AppDomain
Платформа .NET дозволяє програмно здійснювати
моніторинг доменів додатків, створювати нові домени
додатків (або вивантажувати їх) під час виконання,
завантажувати збірки в домени додатків і вирішувати
цілий ряд інших завдань із застосуванням класу
AppDomain
Andrii Hladkyi
trilobt@gmail.com 10
11. Основні методи класу AppDomain
Andrii Hladkyi
trilobt@gmail.com 11
Метод Опис
CreateDomain() Цей статичний метод дозволяє створювати новий
домен програми в поточному процесі
CreateInstance() Цей метод дозволяє створювати екземпляр типу з
зовнішньої збірки після завантаження даної збірки в
викликаючий домен додатки
ExecuteAssembly() Цей метод запускає збірку *. exe всередині домену
додатки, отримавши її ім'я файлу
GetAssemblies() Цей метод отримує набір збірок .NET, які були
завантажені в даний домен додатка (виконавчі збірки
на основі СОМ і С ігноруються)
GetCurrentThreadId() Цей статичний метод повертає ідентифікатор активного
потоку в поточному домені додатку
Load() Цей метод застосовується для динамічного
завантаження збірки в поточний домен додатка
Unload() Цей статичний метод дозволяє вивантажити вказаний
домен програми із заданого процесу
12. Вибрані властивості класу AppDomain
Andrii Hladkyi
trilobt@gmail.com 12
Властивість Опис
BaseDirectory Ця властивість дозволяє отримати шлях до каталогу,
який розпізнавач збірок використовує для зондування
збірок
CurrentDomain Це статична властивість дозволяє отримати домен
програми, що використовується для поточного
виконувалного потоку
FriendlyName Це властивість дозволяє отримати дружнє ім'я
поточного домену додатки
MonitoringIsEnabled Це властивість дозволяє отримати або встановити
значення, яке вказує, чи включений моніторинг ресурсів
центрального процесора і пам'яті для поточного
процесу. Після того, як моніторинг включений для
процесу, відключити його неможливо
SetupInformation Це властивість дозволяє витягти деталі конфігурації для
зазначеного домену додатка, які представлені у вигляді
об'єкта AppDomainSetup
13. Вибрані події класу AppDomain
Andrii Hladkyi
trilobt@gmail.com 13
Подія Опис
AssemblyLoad Ця подія виникає, коли збірка завантажується в пам'ять
AssemblyResolve Ця подія виникає, коли аналізатор збірок не може
знайти місце розташування обов'язкової збірки
DomainUnload Ця подія виникає перед початком вивантаження домена
додатку з розміщуваного процесу
FirstChanceException Ця подія дозволяє отримувати повідомлення про те, що
в домені додатку було згенеровано виняток, перед тим
як середовище CLR почне пошук відповідного
оператора catch
ProcessExit Ця подія виникає в стандартному домені додатку тоді,
коли його батьківський процес завершується
UnhandledException Ця подія виникає, коли виняток не було перехоплено
оброблювачем винятків
15. Створення нових доменів додатків
Єдиний процес здатний розміщувати безліч доменів
додатків, що створюються за допомогою статичного
методу AppDomain.CreateDomain().
Необхідність створення нових доменів додатка:
Створювані динамічні збірки повинні встановлюватися в
спеціальний домен додатка.
Багато API-інтерфейсів, пов'язані з безпекою .NET, вимагають
розуміння того, як конструювати нові домени додатків для
ізоляції збірок на основі наданих облікових даних безпеки.
Andrii Hladkyi
trilobt@gmail.com 15