C#

УЧЕБНЫЕ МАТЕРИАЛЫ ПО ПРОГРАММИРОВАНИЮ, КРЕКИНГУ, HTML, CSS, ОФИСНЫМ ПРИЛОЖЕНИЯМ

[Главная страница] [Контакты]

Программирование для Windows


Запуск приложения, которое должно обрабатывать файлы с конкретным расширением

ЗАДАЧА
Запустить приложение, зарегистрированное для обработки файлов определенного типа.

РЕШЕНИЕ
Используйте метод Start класса System.Diagnostics.Process.

ОБСУЖДЕНИЕ
В C# приложение можно открыть благодаря специализированному классу Process, способному запускать приложения на основе зарегистрированных в Windows типов файлов.

Класс Process позволяет запустить Microsoft Word (для обработки файлов .doc) или Adobe Acrobat Reader (для файлов .pdf) без знания точного местоположения программы на жестком диске. Для этого нужно просто передать имя файла документа в общий метод Start класса System. Diaonostics. Process.

В качестве примера рассмотрим код, который выводит диалоговое окно выбора файла и автоматически открывает файл, используя зарегистрированное приложение. Для компиляции этого примера нужно импортировать пространство имен System.Diagnostics.

private OpenFileDialog dlgOpen = new OpenFileDialog();

private void button1_Click(object sender, EventArgs e)
{
    if (dlgOpen.ShowDialog() == DialogResult.OK)
        Process.Start(dlgOpen.FileName);
}

При попытке запуска файлов, которые не имеют соответствующих зарегистрированных приложений, будет сгенерировано исключение System.ComponentModel.Win32Exception. Вы можете перехватить его и сообщить пользователю о проблеме.

Вы можете захотеть сконфигурировать стартовые параметры более детально. Для этого вы можете создать объект System.Diagnostics.ProcessStartInfo, инкапсулирующий информацию, которая будет служить для запуска приложения, и передать его в общий метод Process.Start:

private OpenFileDialog dlgOpen = new OpenFileDialog();

private void button2_Click(object sender, EventArgs e)
{
    if (dlgOpen.ShowDialog() == DialogResult.OK)
    {
        ProcessStartInfo ProcessStart = new ProcessStartInfo(dlgOpen.FileName);
        Process.Start(ProcessStart);
    }
}

Объект ProcessStartInfo содержит свойства, позволяющие изменить сйособ вы полнения программы. Так, вы можете изменить стартовые параметры приложения или рабочий каталог. Но еще интереснее то, что вы можете изменить команду, выполняемую при запуске приложения. По умолчанию при вызове Process.Start используется команда «открыть», в результате чего документ загружается в соответствующее приложение. Однако многие приложения регистрируют команды, выполняющие другие действия, например печать. Следующий код проверяет, поддерживают ли файлы данного типа команду печати, и выполняет ее. Например, если вы примените этот подход для файла .doc и на вашем компьютере установлен Microsoft Word, Word напечатает документ в фоновом режиме и завершится.

private OpenFileDialog dlgOpen = new OpenFileDialog();

private void button3_Click(object sender, EventArgs e)
{
    if (dlgOpen.ShowDialog() == DialogResult.OK)
    {
        ProcessStartInfo ProcessStart = new ProcessStartInfo(dlgOpen.FileName);

        bool CanPrint = false;
        foreach(string Verb in ProcessStart.Verbs)
            if (Verb.ToLower() == "print")
            {
                // Этот документ, поддерживает печать.
                CanPrint = true;
                // Конфигурирование объекта ProcessStart для выполнения печати.
                ProcessStart.Verb = Verb;
                break;
            }

        if (CanPrint)
            Process.Start(ProcessStart);
        else
            MessageBox.Show("Не могу напечатать этот документ.");
    }
}

Используемая литература:

  1. Занимательное программирование на Bisual Basic.NET: Климов А.П.
  2. Программирование для Microsoft Windows на C#: Чарльз Петцольд.
  3. РеРецепты программирования на Visual Basic.NET: Мэтью Макдональд.