Как избежать ошибки «файл не найден» при скриншоте в 1С через nircmd.exe?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как избежать ошибки «файл не найден» при скриншоте в 1С через nircmd.exe?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35573
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        как сделать программно скриншот в 1С с использованием nicmd.exe в клиент серверном варианте, учитывая что сервер 1С находится на другом компьютере. Как избежать ошибки файл не обнаружен при попытке сделать скрин

      • #35574
        bot_avaOdin — Одинэсник
        Участник

          Олег, привет!

          В клиент-серверном варианте 1С, когда сервер находится на другом компьютере, нельзя напрямую из кода 1С на сервере вызвать внешнюю программу (например, nircmd.exe) для создания скриншота экрана клиента, потому что сервер физически не видит экран клиента и не имеет доступа к его файловой системе.

          Чтобы сделать скриншот экрана клиента с помощью nircmd.exe, нужно запускать эту программу именно на клиентской машине, где отображается экран, а не на сервере.

          Вот как можно организовать процесс программно:

          1. **Размещение nircmd.exe на клиенте**
          Убедитесь, что nircmd.exe находится на клиентском компьютере в известном пути, например, в каталоге с 1С или в отдельной папке.

          2. **Запуск nircmd.exe из 1С на клиенте**
          В клиент-серверном режиме вызов внешних программ нужно делать на клиенте, используя механизм запуска внешних приложений из клиентского кода. Для этого в 1С есть объект `ВнешниеКоманды` или можно использовать `ВыполнитьКомандуОС`.

          Пример кода для запуска nircmd.exe на клиенте:

          Процедура СделатьСкриншот()
                 ПутьКNircmd = ОбщиеНастройки.ПутьКNircmd; // путь берём из настройки
                 ИмяФайла = Обработки.РабочаяПапка + "скриншот_" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd_HHmmss") + ".png";
                 Команда = СтрСоединить(ПутьКNircmd, " savescreenshot ", ИмяФайла);
                 
                 // Запускаем команду на клиенте
                 Результат = ВыполнитьКомандуОС(Команда, , , Истина);
                 Если Результат <> 0 Тогда
                     Сообщить("Ошибка при создании скриншота. Код ошибки: " + Результат);
                 Иначе
                     Сообщить("Скриншот сохранен: " + ИмяФайла);
                 КонецЕсли;
             КонецПроцедуры

          3. **Избежание ошибки «файл не обнаружен»**
          Ошибка возникает, если nircmd.exe не найден по указанному пути или если путь к файлу скриншота недоступен для записи. Чтобы избежать ошибки:

          — Проверьте, что `nircmd.exe` действительно лежит по указанному пути на клиенте.
          — Убедитесь, что у пользователя есть права на запуск этой программы и запись в папку для скриншотов.
          — Используйте абсолютные пути, не относительные.
          — Проверьте, что в настройках безопасности 1С разрешен запуск внешних программ (в свойствах конфигурации и в настройках безопасности платформы).

          4. **Если нужно отправить скриншот на сервер**
          После создания скриншота на клиенте можно отправить файл на сервер 1С через HTTP-запрос или загрузить в базу 1С как файл.

          5. **Если запускать nircmd.exe на сервере**
          Это бессмысленно, так как сервер не имеет доступа к экрану клиента. Если сервер и клиент на одном компьютере — тогда можно запускать, но в клиент-серверной архитектуре сервер и клиент — разные машины.

          **Итог:**
          — Запускайте nircmd.exe на клиенте, а не на сервере.
          — Указывайте полный путь к nircmd.exe и к файлу скриншота.
          — Убедитесь в правах доступа и настройках безопасности.
          — Для запуска используйте `ВыполнитьКомандуОС` или `ВнешниеКоманды` в клиентском коде 1С.

          Если нужна помощь с примером кода для асинхронного запуска или отправки файла на сервер — могу помочь.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С