Как запустить приложение из 1С, если неизвестен точный путь к исполняемому файлу

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В практике разработчика 1С часто возникает задача интегрировать внешнее программное обеспечение в рабочий процесс. Это может быть специализированный графический редактор, почтовый клиент, калькулятор или отраслевое ПО. Основная проблема заключается в том, что на разных компьютерах пользователей программы могут быть установлены в разные директории: кто-то использует стандартный C:\Program Files, а кто-то устанавливает софт на диск D: или в профиль пользователя AppData. В этой статье мы подробно разберем, как заставить систему саму найти нужный файл и как программно вычислить его местоположение.

Проблема стандартного метода запуска

Обычно для запуска внешних программ используется команда ЗапуститьПриложение(). Если мы передаем в нее только имя файла, например, ЗапуститьПриложение("calc.exe"), система пытается найти его в ограниченном наборе мест. Проанализируем стандартную последовательность поиска Windows:

  1. Текущий системный каталог (где запущена сама 1С).
  2. Каталог Windows.
  3. Системный каталог System32.
  4. Все каталоги, перечисленные в системной переменной окружения PATH.

Если ваша программа не является частью операционной системы и не прописала себя в PATH при установке, вызов ЗапуститьПриложение("my_app.exe") закончится ошибкой. Рассмотрим, как обойти это ограничение.

Метод 1: Использование ветки реестра App Paths

Это самый профессиональный и надежный способ. Windows хранит информацию о путях к "известным" приложениям в специальном разделе реестра. Многие современные инсталляторы регистрируют там полный путь к исполняемому файлу. Разберем, как прочитать эти данные из 1С.

Нужный нам ключ находится по адресу: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\. Каждому приложению там соответствует подраздел с именем файла (например, chrome.exe).

Посмотрим на пример кода, который позволяет получить путь к программе через WScript.Shell:


Функция ПолучитьПутьКПриложениюИзРеестра(ИмяФайла)
    Попытка
        Shell = Новый COMОбъект("WScript.Shell");
        ПутьВРеестре = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" + ИмяФайла + "\";
        ПолныйПуть = Shell.RegRead(ПутьВРеестре);
        Возврат ПолныйПуть;
    Исключение
        // Если в HKLM нет, можно проверить в HKEY_CURRENT_USER
        Возврат "";
    КонецПопытки;
КонецФункции

Используя этот метод, мы можем получить точный путь к excel.exe, chrome.exe или любой другой зарегистрированной программе, даже если она установлена на нестандартный диск.

Метод 2: Поиск через ассоциации расширений файлов

Если мы не знаем имени исполняемого файла, но знаем расширение файлов, с которыми работает программа, мы можем выяснить, какое приложение назначено для их открытия. Выясним причину, почему это удобно: пользователю не нужно ничего настраивать, система сама скажет, чем она обычно открывает, например, .pdf.

Данные об ассоциациях хранятся в корневом разделе реестра HKEY_CLASSES_ROOT. Проанализируем ситуацию: нам нужно сначала найти идентификатор типа файла, а затем команду открытия.

  1. Читаем значение в HKEY_CLASSES_ROOT\.ext (где .ext — расширение).
  2. Используем полученное значение для поиска в HKEY_CLASSES_ROOT\ИмяТипа\shell\open\command.

Метод 3: Использование системных переменных окружения

Программы часто устанавливаются в стандартные папки, пути к которым могут меняться в зависимости от версии Windows или настроек пользователя. Вместо жесткого кодирования пути C:\Program Files, правильно использовать переменные окружения. Разберем основные из них:

Пример получения пути в 1С:


Shell = Новый COMОбъект("WScript.Shell");
ПутьКПрофилю = Shell.ExpandEnvironmentStrings("%LocalAppData%");
ПолныйПутьКПрограмме = ПутьКПрофилю + "\Programs\MySoft\my_app.exe";

Метод 4: Использование COM-объектов (для офисного ПО)

Если ваша задача — запустить приложение из пакета Microsoft Office или AutoCAD, вам вообще не нужно знать, где лежит исполняемый файл. Система использует технологию OLE/COM. Рассмотрим подробнее: при вызове Новый COMОбъект("Excel.Application") операционная система сама находит установленный экземпляр Excel и запускает его в фоновом или видимом режиме. Это самый стабильный способ взаимодействия с внешним ПО, так как он предоставляет программный интерфейс управления.

Метод 5: Поиск ярлыков в меню «Пуск»

Если реестр пуст, а программа не является COM-сервером, мы можем попытаться найти ее ярлык в меню «Пуск». Проанализируем структуру: ярлыки хранятся в %ProgramData%\Microsoft\Windows\Start Menu\Programs. Мы можем программно перебрать файлы .lnk и прочитать их свойство "Target" (Объект).

Метод 6: Универсальный подход с пользовательской настройкой

Как показывает практика и обсуждения на форумах, самым надежным (хотя и менее автоматизированным) является комбинированный подход. Мы пытаемся найти программу автоматически одним из способов выше, а если не удается — предоставляем пользователю возможность самому указать путь в настройках.

Рассмотрим алгоритм реализации такой кнопки:

  1. Проверяем, заполнен ли путь в константе или справочнике настроек.
  2. Если не заполнен, пробуем найти через App Paths в реестре.
  3. Если поиск в реестре не дал результата, выводим диалог выбора файла ДиалогВыбораФайла.
  4. Сохраняем выбранный путь для последующих запусков.

Пример реализации выбора файла:


Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите исполняемый файл программы";
Диалог.Фильтр = "Исполняемые файлы (*.exe)|*.exe";
Если Диалог.Выбрать() Тогда
    ВыбранныйПуть = Диалог.ПолноеИмяФайла;
    // Сохраняем путь в базу данных
КонецЕсли;

Важный момент: При запуске через ЗапуститьПриложение() рекомендуется всегда проверять существование файла методом Файл.Существует(), чтобы избежать неинформативных системных ошибок, которые могут напугать пользователя.

Заключение

Мы рассмотрели различные уровни поиска приложений в Windows: от простого обращения по имени до глубокого анализа реестра и переменных окружения. Использование этих методов делает вашу конфигурацию 1С более гибкой и устойчивой к изменениям в ИТ-инфраструктуре заказчика. Помните, что автоматический поиск лучше всего дополнять возможностью ручной корректировки пути в интерфейсе программы.

← На главную