Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

Управление запуском процесса с использованием класса ProcessStartInfo

Метод

Process.Start
позволяет также передавать объект типа
System.Diagnostics.ProcessStartInfo
для указания дополнительной информации, касающейся запуска определенного процесса. Ниже приведено частичное определение
ProcessStartInfo
(полное определение можно найти в документации):

public sealed class ProcessStartInfo : object

{

public ProcessStartInfo;

public ProcessStartInfo(string fileName);

public ProcessStartInfo(string fileName, string arguments);

public string Arguments { get; set; }

public bool CreateNoWindow { get; set; }

public StringDictionary EnvironmentVariables { get; }

public bool ErrorDialog { get; set; }

public IntPtr ErrorDialogParentHandle { get; set; }

public string FileName { get; set; }

public bool LoadUserProfile { get; set; }

public SecureString Password { get; set; }

public bool RedirectStandardError { get; set; }

public bool RedirectStandardInput { get; set; }

public bool RedirectStandardOutput { get; set; }

public Encoding StandardErrorEncoding { get; set; }

public Encoding StandardOutputEncoding { get; set; }

public bool UseShellExecute { get; set; }

public string Verb { get; set; }

public string[] Verbs { get; }

public ProcessWindowStyle WindowStyle { get; set; }

public string WorkingDirectory { get; set; }

}

Чтобы

опробовать настройку запуска процесса, модифицируйте метод
StartAndKillProcess
для загрузки Microsoft Edge и перехода на сайт
www.facebook.com
с применением ассоциации
MsEdge
:

static void StartAndKillProcess

{

Process proc = null;

// Запустить Microsoft Edge и перейти на сайт Facebook

// с развернутым на весь экран окном.

try

{

ProcessStartInfo startInfo = new

ProcessStartInfo("MsEdge", "www.facebook.com");

startInfo.UseShellExecute = true;

proc = Process.Start(startInfo);

}

catch (InvalidOperationException ex)

{

Console.WriteLine(ex.Message);

}

...

}

В .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, тогда текущим будет каталог, в котором находится скомпилированная сборка, т.е.
.\bin\debug\net5.0
. Вам необходимо должным образом скорректировать путь к документу Word.

Поделиться с друзьями: