Не так давно, передо мной встала задача, сделать так чтобы регламентные задания 1С, в файловой базе, выполнялись постоянно, но при этом никому бы не приходилось держать открытой 1Ску под пользователем регламентных заданий.
Так как конфигурация была переписана, и некоторые (дописанные) задания требовали наличия полных прав (а переписывать всё в привилегированный модуль было долго и лень ;) ), то было решено запускать 1Ску под пользователем с полными правами, и прятать окно 1С с рабочего стола чтобы кому-либо не было доступа к интерфейсу программы.
Лучшим вариантом стал запуск 1С как службы.
Исходный код написан на Delphi
Для тех, кто не сможет скомпилировать исходники сервиса, поменяв в коде логин и пароль пользователя для запуска 1С, для них есть скомпилированный файл сервиса со встроенным логином: "ServiceAdmin" и паролем: "MegaPassword" без кавычек, и с соблюдением регистра. Нужно будет только добавить этого пользователя в базу и задать ему этот пароль.
И самое главное! Если в конфигурации у пользователей есть настройка типа "Запрашивать подтверждение при закрытии программы" или любые её разновидности, которые не закрывают 1С, а выводят какие-нибудь сообщения и ждут действия пользователя перед закрытием, то для этого пользователя необходимо их ОТКЛЮЧИТЬ, иначе процесс 1С зависнет и сервис не сможет остановится ожидая закрытия 1С. Останется только срубать 1С через ctrl+alt+del.
Настройка сервиса производится в файле service.ini. Для удобства редактирования файла настроек, а также установки/запуска/остановки сервиса, используется ServiceSetupGUI.exe. С настройками, думаю, не возникнет проблем. Все на русском.
Есть еще один нюанс по остановке сервиса и как следствие закрытию 1С. В настройках сервиса есть галка "Останавливать 1С посылкой wm_close". Она означает, что для закрытия 1С главному окну программы будет послана winapi-комманда WM_CLOSE, что примерно аналогично нажатию крестика "Закрыть" в окне программы. И в большинстве случаев этого будет достаточно. НО, в моей конфигурации нужно было обязательно выполнить, на важно какие, действия перед закрытием 1С, а wm_close бывало приходило раньше, чем они завершались, и 1с закрывалась. Так вот, в этом случае можно убрать галку "Останавливать 1С посылкой wm_close", в этом случае сервис создаст файл "wm_close" в папке, которая будет указана в настройке "Общая с 1С папка для записи файла", и тогда в 1С для нашего пользователя в процедуре ПриНачалеРаботыСистемы можно подключить обработчик ожидания, в котором проверять, не появился ли в нашей папке файл wm_close, и если он там есть, то выполнять необходимые нам действия, после чего вызывать ЗавершитьРаботуСистемы( Ложь ); Сервис дождётся завершения 1С и остановится. Путь к этой папке в 1С у меня хранится в константе, хотя можно его и в коде прописать, если уверены что папка ни куда переедет.
На счет прав. При установке сервиса кнопкой "Установить" из ServiceSetupGUI у пользователя должны быть права администратора. Также если для остановки сервиса через создание файла wm_close в папке нужно проследить чтобы у соответствующих пользователей были права на запись и удаление файлов в этой папке.
Сервис по умолчанию имеет Тип запуска - автоматически, т.е. при загрузке компа сервис стартанет и запустит 1С. Тип запуска можно сменить либо в Delphi, либо в свойствах службы в оснастке Windows.
В принципе вроде всё, будут вопросы пишите : )