Как открыть файл в фоновом режиме

Обновлено: 06.07.2024

  • в каких случаях важно запускать макрос в «фоновом» режиме и почему необходимо реагировать на действия пользователя;
  • пример реализации работы «фонового» приложения (проверено на версиях c 2007);
  • актуализация программного кода в приведенном примере к версиям 2013-2016.

Зачем скрывать приложение с экрана?

Приложение с выполняющимся макросом имеет смысл переводить в «фоновый» режим, если предполагается, что пользователь продолжит работать за компьютером, при этом без необходимости контролировать работу макроса: скрытое с экрана приложение не вызовет раздражение пользователя «непрорисованной» экранной областью, не потребует ресурсов для такой прорисовки, не будет подвержено воздействию пользователя на формирующуюся книгу (например, активацией объектов книги, использованием буфера памяти приложения).

Как реализовать?

Объектная модель Excel позволяет работать с несколькими книгами (объектами Workbook) в одном приложении (в объекте Application). А значит, приложение, скрытое с экрана для выполнения макроса, может быть вызвано операционной системой для попытки открыть в нем указанный пользователем файл. В результате, попытка открытия файла либо будет безрезультатной, либо пользователю придется ожидать окончания выполнения скрытого макроса для возможности приступить к работе с файлом.

  1. Чтобы скрытое приложение могло реагировать должным образом на загрузку пользовательского файла, необходимо указать порядок действий в событиях приложения (события объекта Application) – реализую их в отдельном классе.

Стоит отметить, что в подобных задачах часто реализуются возможности для управления «своим» или «чужим» запущенным приложением Excel, определяется количество допустимых для обработки книг, список допустимых к открытию книг.

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

Что актуализировать?

Приложение Excel, начиная с версии 2013, позволяет пользователю работать с книгами в отдельных окнах (реализуя Single Document Interface). При этом, книги фактически, как и в прежних версиях, могут быть загружены в коллекцию одного приложения. Потому приведенный пример программного кода в целом остается работоспособным за исключением обнаруженных на практике «специфического поведения» приложения.

При попытке закрыть вызванный пользователем файл, происходит обращение к скрытому приложению, в котором он в данный момент загружен. Важно временно отобразить скрытое приложение, перед закрытием файла. Иначе в памяти остаются «висеть» ссылки на объекты закрываемого файла. Приведу пример исправления события.

Сразу оговорюсь, что Microsoft Office на сервере был установлен и при обычном запуске обработки (не в фоновом задании) все проходило на ура.

Так как фоновые задания выполняются от имени пользователя, под которым работает сервер 1С:Предприятие (обычно это USR1CV82), то возникло логичное предположение, то у этого пользователя не достаточно прав. Для эксперимента этому пользователю были выданы права администратора и фоновое задание завершилось успешно. Однако, это был не вариант. Требовались минимально возможные права и я окунулся в мир поиска информации в глобальной сети.

Итак. Первое что удалось выяснить, это то, что пользователю USR1CV82 необходимо дать права на запуск DCOM Microsoft Excel Application (прошу прошения, могу путаться в понятиях, но смысл, что делать, думаю, будет понятен).

Для этого необходимо:

1. Нажать кнопку Пуск и выбрать Панель управления.

2. Дважды щелкнуть значок Администрирование и выбрать пункт Службы компонентов.

3. В левой панели окна "Службы компонентов" дважды щелкнуть пункт Службы компонентов, дважды щелкнуть пункт Компьютеры и выбрать Мой компьютер.

4. Выбрать папку Настройка DCOM.

5. В окне сведений найти объект Microsoft Excel Application, щелкнуть его правой кнопкой и выбрать пункт Свойства (здесь есть подводный камень, с которым я довольно долго промучался - если сервер 64-х разрядный, то и выпуск Office так же должен быть х64, иначе объекта Microsoft Excel Application не будет в списке и права для него мне так и не удалось настроить пока не переустановил Office).

6. Открыть вкладку Безопасность.

7. В разделе Разрешения на запуск выбрать пункт Настроить и нажать кнопку Изменить.

8. Добавить пользователя USR1CV82.

Ниже поясняющие скриншоты.



Однако, после произведенных описанных выше настроек фоновое задание так и не заработало.

При работе с COM объектом экземляр Excel успешно создавался, но открыть файл не получалось

Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу "C:\xls_test\test.xls". Это может быть вызвано одной из следующих причин.

• Указан несуществующий файл или путь.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.

Поиски в просторах сети были продолжены и решение таки было найдено:

Необходимо создать папку

    для Windows Server x64

Данное расположение папок указано для Office 2007. Для Office 2010 не зависимо от разрядности платформы необходимо создавать папку C:\Windows\System32\config\systemprofile\Desktop (данный факт так же потратил не мало моего времени). В общем, если создали папку, а ошибки не исчезли, создайте вторую. Так же необходимо дать права на созданную папку пользователю USR1CV82. Практика показала, что достаточно прав, выдаваемых системой по умолчанию.

Как правило, выполнение команд в терминале связано с одним неудобством — прежде чем приступить к вводу следующей команды, следует дождаться выполнения предыдущей. Это происходит, поскольку текущий процесс блокирует доступ к оболочке операционной системы и в таких случаях говорят, что команда выполняется на переднем плане. Что же делать, если нужно запустить несколько команд одновременно? Есть несколько решений. Первое и наиболее очевидное — открыть дополнительное окно терминала. Второе — инициировать выполнение команды в фоновом режиме.

Если какой-либо процесс происходит в фоновом режиме, это значит, что он не предусматривает взаимодействия с пользователем, следовательно, доступ к оболочке остается свободным. Прочитав эту статью, вы узнаете как запустить процесс в фоне Linux и что делать, чтобы их выполнение не прерывалось после закрытия терминала.

Как запустить процесс в фоне Linux

Для выполнения команды в фоновом режиме достаточно добавить в конце символ амперсанда (&):

В выводе терминала будут отображены порядковый номер задачи (в квадратных скобках) и идентификатор процесса:


В фоновом режиме можно одновременно запускать сразу два, три, четыре процесса и даже больше.

Здесь >/dev/null 2>&1 обозначает, что stdout будет перенаправлен на /dev/null, а stderr — к stdout.


Узнать состояние всех остановленных и выполняемых в фоновом режиме задач в рамках текущей сессии терминала можно при помощи утилиты jobs c использованием опции -l:

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


В любое время можно вернуть процесс из фонового режима на передний план. Для этого служит команда fg:

Если в фоновом режиме выполняется несколько программ, следует также указывать номер. Например:


Для завершения фонового процесса применяют команду kill с номером программы:


Как перевести процесс в фоновый режим

Если изначально процесс был запущен обычным способом, его можно перевести в фоновый режим, выполнив следующие действия:

  1. Остановить выполнение команды, нажав комбинацию клавиш Ctrl+Z.
  2. Перевести процесс в фоновый режим при помощи команды bg.


Работа процессов в фоне

Запуск скрипта в фоне linux - это одно, но надо чтобы он ещё работал после закрытия терминала. Закрытие терминала путем нажатия на крестик в верхнем углу экрана влечет за собой завершение всех фоновых процессов. Впрочем, есть несколько способов сохранить их после того как связь с интерактивной оболочкой прервется. Первый способ — это удаление задачи из очереди заданий при помощи команды disown:

Как и в предыдущих случаях, при наличии нескольких одновременно выполняемых процессов следует указывать номер того, относительно которого будет выполнено действие:


Убедиться, что задачи больше нет в списке заданий, можно, использовав уже знакомую утилиту jobs -l. А чтобы просмотреть перечень всех запущенных процессов (в том числе и отключенных) применяется команда

Второй способ сохранить запущенные процессы после прекращения работы терминала — команда nohup. Она выполняет другую команду, которая была указана в качестве аргумента, при этом игнорирует все сигналы SIGHUP (те, которые получает процесс при закрытии терминала). Для запуска команды в фоновом режиме нужно написать команду в виде:


Как видно на скриншоте, вывод команды перенаправляется в файл nohup.out. При этом после выхода из системы или закрытия терминала процесс не завершается. Существует ряд программ, которые позволяют запускать несколько интерактивных сессий одновременно. Наиболее популярные из них — Screen и Tmux.

  • Screen либо GNU Screen — это терминальный мультиплексор, который позволяет запустить один рабочий сеанс и в рамках него открыть любое количество окон (виртуальных терминалов). Процессы, запущенные в этой программе, будут выполняться, даже если их окна невидимы или программа прекратила работу.
  • Tmux — более современная альтернатива GNU Screen. Впрочем, возможности Tmux не имеют принципиальных отличий — в этой программе точно так же можно открывать множество окон в рамках одного сеанса. Задачи, запущенные в Tmux, продолжают выполняться, если терминал был закрыт.

Выводы

Чтобы запустить скрипт в фоне linux, достаточно добавить в конце знак &. При запуске команд в фоновом режиме отпадает необходимость дожидаться завершения одной команды для того, чтобы ввести другую. Если у вас возникли вопросы, обязательно задавайте их в комментариях.

Как известно, что в компьютерных, что в мобильных операционных системах достаточно много программ работает в фоне. Иными словами, программа фоновом режиме потребляет ресурсы системы точно так же, как и консольные приложения, однако пользователю не видна. Сейчас будет рассмотрено несколько случаев использования такого режима для Windows и наиболее популярных мобильных ОС.

Что такое фоновый режим и для чего он нужен?

Итак, уже понятно, что саму программу, работающую в фоне, пользователь не видит. Определить состояние ее активности можно двояко. В общем случае для этого в Windows-системах используется стандартный «Диспетчер задач», в котором на разных вкладках отображены все запущенные процессы, включая и активные приложения в фоновом режиме. В более конкретном случае, если речь идет о пользовательских программах, их можно найти в свернутом виде в системном трее.

фоновый режим

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

Как запустить программу в фоновом режиме в Windows 10

К сожалению, возможность такого запуска для настольных ПК и ноутбуков появилась только в десятой версии Windows. Ее и будем рассматривать.

Фоновый режим для пользовательских программ включается в два этапа, один из которых является необязательным (далее будет объяснено, почему). Первым делом следует зайти в раздел параметров, который вызывается из меню «Пуск», после чего перейти к настройкам конфиденциальности.

программа фоновом режиме

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

как включить фоновый режим

Для того чтобы включить запуск приложения при старте системы, основной исполняемый файл программы следует включить в список автозагрузки либо в «Диспетчере задач», либо в настройках конфигурации, вызываемых командой msconfig в консоли «Выполнить» (Win + R). После этого будет активирован и автостарт, и фоновый режим. Вот только не следует забывать о работающем приложении, ведь потребление системных ресурсов может неоправданно возрасти. И добавить свою программу можно только при помощи специальных утилит или поместить ярлык программы в папку автозапуска вручную.

Как включить фоновый режим приложений на iPhone?

Теперь несколько слов о «яблочных» мобильных гаджетах. Фоновый режим включить в них тоже можно. Для примера возьмем iPhone (хотя по большому счету без разницы, какое устройство будет использоваться).

Сначала нужно скачать небольшую бесплатную утилиту под названием Backgrounder (сделать это можно на компьютере через сервис Sydia, поскольку в «родном» хранилище этого приложения нет). Далее следует загрузить инсталлятор на устройство через iTunes и установить программу. Желательно создать нужный каталог вручную, скопировать в него инсталляционный файл и установить приложение туда же.

Обратите внимание: после установки иконка приложения в списке апплетов создана не будет, поэтому искать ее среди инсталлированных программ не имеет смысла. Кроме того, в файловом менеджере категорически запрещается удалять или перемещать папку установки, поскольку после этого приложение системой распознано не будет.

приложения в фоновом режиме

Использование фоновой работы для Google Play

В Android-системах фоновый режим, как правило, используется не только для системных или встроенных служб, но и для сервиса Google Play.

фоновый режим

Если вдруг по каким-то причинам пользователь получает уведомление о том, что фоновый обмен данными отключен, нужно использовать настройки, где выбирается меню беспроводных сетей. Здесь используем строку передачи данных и жмем на значок с тремя черточками, после чего в новом меню активируем автосинхронизацию и строку фоновых данных.

В некоторых устройствах путь может отличаться. Иногда нужно будет использовать раздел настройки батареи и доставку, где и находится тот самый фоновый режим. В Android 5.0 и выше нужно использовать разрешение фоновой передачи данных.

Вместо итога

Вот и все, что касается использования фонового режима. Насколько это целесообразно для Windows, каждый решает сам. Однако для мобильных устройств, в частности для Apple-девайсов, активация фонового режима является поистине находкой, ведь можно будет запускать несколько приложений одновременно и все их сворачивать при запуске других программ.

Читайте также: