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