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")

<p id="AutBody_Root527">Использование команд операционной системы с классом ProcessStartInfo</p>

Помимо применения ярлыков операционной системы для запуска приложений с классом 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.

Перейти на страницу:

Похожие книги