KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Перейти на страницу:

В .NET Core свойство

UseShellExecute
по умолчанию имеет значение
false
, тогда как в предшествующих версиях .NET его стандартным значением было
true
. Именно по этой причине показанная ниже предыдущая версия
Process.Start()
больше не работает без использования
ProcessStartInfo
и установки свойства
UseShellExecute
в
true
:

Process.Start("msedge")

Использование команд операционной системы с классом ProcessStartInfo

Помимо применения ярлыков операционной системы для запуска приложений с классом

ProcessStartInfo
можно также использовать файловые ассоциации. Если в среде Windows щелкнуть правой кнопкой мыши на имени документа Word, то с помощью контекстного меню можно будет отредактировать или распечатать этот документ. Давайте посредством класса
ProcessStartInfo
выясним доступные команды и затем применим их для манипулирования процессом. Создайте новый метод со следующим кодом:

static void UseApplicationVerbs()

{

  int i = 0;

  // Укажите здесь фактический путь и имя документа на своей машине

  ProcessStartInfo si =

    new ProcessStartInfo(@"..TestPage.docx");

  foreach (var verb in si.Verbs)

  {

    Console.WriteLine($"  {i++}. {verb}");

  }

  si.WindowStyle = ProcessWindowStyle.Maximized;

  si.Verb = "Edit";

  si.UseShellExecute = true;

  Process.Start(si);

}

Первая часть кода выводит все команды, доступные для документа Word:

***** Fun with Processes *****

  0. Edit

  1. OnenotePrintto

  2. Open

  3. OpenAsReadOnly

  4. Print

  5. Printto

  6. ViewProtected

После установки

WindowStyle
в
Maximized
(т.е. развернутое на весь экран окно) команда (
Verb
)устанавливается в
Edit
, что приводит к открытию документа в режиме редактирования. В случае установки команды в
Print
документ будет отправлен прямо на принтер.

Теперь, когда вы понимаете роль процессов Windows и знаете способы взаимодействия с ними из кода С#, можно переходить к исследованию концепции доменов приложений .NET.

На заметку! Каталог, в котором выполняется приложение, зависит от того, как вы его запускаете. Если вы применяете команду

dotnet run
, то текущим каталогом будет тот, где располагается файл проекта. Если же вы используете Visual Studio, тогда текущим будет каталог, в котором находится скомпилированная сборка, т.е.
.bindebugnet5.0
. Вам необходимо должным образом скорректировать путь к документу Word.

Домены приложений .NET

На платформах .NET и .NET Core исполняемые файлы не размещаются прямо внутри процесса Windows, как в случае традиционных неуправляемых приложений. Взамен исполняемый файл .NET и .NET Core попадает в отдельный логический раздел внутри процесса, который называется доменом приложения. Такое дополнительное разделение традиционного процесса Windows обеспечивает несколько преимуществ.

• Домены приложений являются ключевым аспектом нейтральной к операционным системам природы платформы .NET Core, поскольку такое логическое разделение абстрагирует отличия в том, как лежащая в основе операционная система представляет загруженный исполняемый файл.

• Домены приложений оказываются гораздо менее затратными в смысле вычислительных ресурсов и памяти по сравнению с полноценными процессами. Таким образом, среда CoreCLR способна загружать и выгружать домены приложений намного быстрее, чем формальный процесс, и может значительно улучшить масштабируемость серверных приложений.

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

На заметку! Поддержка доменов приложений в .NET Core изменилась. В среде .NET Core существует в точности один домен приложения. Создавать новые домены приложений больше нельзя, поскольку это требует поддержки со стороны исполняющей среды и в общем случае сопряжено с высокими накладными расходами. Изоляцию сборок в .NET Core обеспечивает класс

ApplicationLoadContext
(рассматриваемый далее в главе).

Класс System.AppDomain

С выходом версии .NET Core класс

AppDomain
считается почти полностью устаревшим. Хотя большая часть оставшейся поддержки предназначена для упрощения перехода из .NET 4.x в .NET Core, она по-прежнему может приносить пользу, как объясняется в последующих двух разделах.

Взаимодействие со стандартным доменом приложения

С помощью статического свойства

AppDomain.CurrentDomain
можно получать доступ к стандартному домену приложения. При наличии такой точки доступа появляется возможность использования методов и свойств
AppDomain
для проведения диагностики во время выполнения.

Чтобы научиться взаимодействовать со стандартным доменом приложения, начните с создания нового проекта консольного приложения по имени

DefaultAppDomainApp
. Модифицируйте файл
Program.cs
, поместив в него следующий код, который просто выводит подробные сведения о стандартном домене приложения с применением нескольких членов класса
AppDomain
:

using System;

using System.IO;

using System.Linq;

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*