Имя: Пароль:
1C
1С v8
Проблема с запуском регламентированного задания, в котором используется COM компонент
0 jetzack
 
25.09.16
19:15
Добрый вечер!

Уже как неделю бьюсь над следующей проблемой-
1с 8.2 серверная, Windows Server 2008 R2. Есть обработка, которую должно запускать регламентное задание. Эта обработка создает компонент COM и далее использует его для определенной задачи.

Если открывать обработку интерактивно под обычным пользователем, то все ок - создается компонент COM и далее работает как часы.
Но вот запуск от рег задания не работает - ком компонент как будто бы создается, но при попытки обратиться к любому методу или полю этого компонента возникает "Неизвестная ошибка".

Сначала думали, что дело в безопасности - дали пользователю под которым запускаются рег задания 1CSrv82 (как-то так) полные права на нужные каталоги, которые использует компонента. Дали права на саму компоненту (в dcomcnfg на вкладке безопасность). Но ничего не изменилось - так же неизвестная ошибка.

Далее в качестве эксперимента, указали в ком объекта в dcomcnfg на вкладке удостоверение запуск от текущего пользователя - когда стартует рег задание компонента запускается от имени и в сессии текущего залогиненного на сервере пользователя - все работает!

Далее была мысль - а вдруг, компонента не умеет работать без визуальной сессии. Создали скрипт на vbs, которые создает так же ком компоненту и делает с ней что-то. Этот скрипт запускали в планировщике задач от пользователя 1CSRV82 и отключались от сервера - все работает!!!

При этом сама компонента не успевает сгенерировать ни логов ни ошибок. Есть только записи в журнале регистрации событий Windows.
Но там тоже ошибка достаточно общая 0xc0000005

Также запуск компоненты через скрипт или само приложение от имени 1CSRV82 - успешно.
А вот запуск в рег задании - падает с неизвестной ошибкой при попытки обращения к полю или методу ком компонента.

Ребят, подскажите что-нибудь пожалуйста, а то уже мысли кончились куда смотреть.
1 Mauser
 
25.09.16
19:26
Никогда и не кому не рассказывай, что это за компонентии что она делает. Это резко повысит шансы на получение ответа.
2 jetzack
 
25.09.16
19:28
(1) Компонента от криптопровайдера для ЮЗЭДО. Но суть то в том, что дело не в ней - еще раз повторюсь - vbs от имени пользователя, от которого запускаются рег задания работает.
3 Torquader
 
25.09.16
19:29
А что будет, если из регламентного задания запустить сценарий на VbScript, в котором работать с компонентой ?
И, если оно так работает, то почему бы так всё и не оставить ?
4 breezee
 
25.09.16
19:30
(2) На стророне криптоправадера то права есть на чтение компоненты?
5 Mauser
 
25.09.16
19:30
(2) Ну ок, используйте vbs
6 Torquader
 
25.09.16
19:30
Запускать нужно не из планировщика, а от созданного от имени пользователя процесса.
7 shuhard
 
25.09.16
19:31
(0) запускай обработку на клиенте через epf + виндовый шедулер


+ мы не услышали ни слова про разрядность сервера 1С, не 64 ли он ?
8 breezee
 
25.09.16
19:31
(4) Ну в смысле на объект, который в com содержится
9 jetzack
 
25.09.16
19:31
(6) Все так, так делали. Тот же результат
10 jetzack
 
25.09.16
19:31
(7) Да, 64
11 jetzack
 
25.09.16
19:31
(5) Ваш ответ понятен, но не приемлем
12 shuhard
 
25.09.16
19:32
(10) раз 64 - бегом читать про тонкости запуска
13 Torquader
 
25.09.16
19:32
Если 64, то как раз vbs будет запускаться в 64-битах, если не запускать специально 32.
14 jetzack
 
25.09.16
19:32
(4) не совсем понимаю
15 jetzack
 
25.09.16
19:34
(13) Я не думаю, что дело в разрядности, так как интерактивно обработка запускается и работает.
Обращаю внимание на то, что если у кома задать удостоверение текущий пользователь и залогиниться, то рег задание запускает com от имени залогиненного пользователя - и все работает.
16 Torquader
 
25.09.16
19:35
(15) На клиенте (интерактивно) вы в 32-битах, а на сервере - в 64.
17 shuhard
 
25.09.16
19:35
(15)[Я не думаю, что дело в разрядности]
твоё мнение мало что решает
18 jetzack
 
25.09.16
19:41
(16) На клиенте (интерактивно) вы в 32-битах, а на сервере - в 64.

Я не понимаю! 1с 64 бита, сервер 64 бита. Откуда 32бита то появляется?
19 Serginio1
 
25.09.16
19:43
(18) Потому что 64 виндовый клиент только в 8.3.9
20 Mauser
 
25.09.16
19:45
(11) Извините, Саманта Пауэр!

(18) Потому что клиентская часть 1С предприятия 32 битная.
21 Serginio1
 
25.09.16
19:45
19+ Но вот .Net компоненты в отличие от  нативных компонент может выполняться как в 32 так и 64 разрядных процессах
22 Serginio1
 
25.09.16
19:46
(20) Окромя линукса и 8.3.9
23 jetzack
 
25.09.16
19:48
Так, ок. Клиент 32 бита. Выше писалось, что vbs поумолчанию запускается в 64 битном режиме. Клиент и vbs  с компонентой работают. Как-то не очень проясняется.
24 Mauser
 
25.09.16
19:48
(21) Вот, держи салфетку, у тебя с монитора что-то капает.
25 Torquader
 
25.09.16
19:49
(23) Если из задания на сервере запустить VbScript, который у тебя работает - компонента тоже работает ?
Если да, то зачем насиловать 1С и можно остаться на VbScript.
26 jetzack
 
25.09.16
19:52
(25) Нет спасибо, по мне глупо имея 1С и готовый модуль работы с криптопровадером идти лесом и писать все на VBS.
27 infosoft-v
 
25.09.16
19:53
Добрый день всем.
Предполагаю, что внешняя обработка запускается рег.заданием в безопасном режиме работы. В этом режиме есть ограничения по работе с com. Вот фрагмент из доки.

Запрещены операции, приводящие к использованию внешних средств по отношению к платформе «1С:Предприятие»:
? Механизмы COM:
? COMОбъект(),
28 Mauser
 
25.09.16
19:53
(26) Готовый модуль имеет своего разработчика?
29 jetzack
 
25.09.16
19:54
(28) Имеет, но компания-криптопровайдер разводит руками и ссылается на настройку сервера
30 Mauser
 
25.09.16
19:55
(29) На какую именно?
31 Serginio1
 
25.09.16
19:55
(24) Не у меня ничего не капает. А что должно капать? У тебя какие то фантазии. Поговорим о твоих фантазиях?
32 jetzack
 
25.09.16
19:56
(27) Нет, Это не так
33 Serginio1
 
25.09.16
19:58
34 jetzack
 
25.09.16
19:59
(33) рекламма?
35 Mauser
 
25.09.16
19:59
(31) Ты гляди, у него еще один интерес кроме дотнета есть! Он про чужие фантазии, оказывается любит!
36 infosoft-v
 
25.09.16
20:02
А кто пользователь рег.задания в 1С?
37 infosoft-v
 
25.09.16
20:06
И еще, что бы разделить проблемы, можно обращение к com объекту, для теста перенесим из внешней обработки в общий модуль, который вызывает рег.задание?
38 Serginio1
 
25.09.16
20:08
(35) Я не люблю, просто стараюсь помочь людям.
(34) Реклама как настроить DCOM.
39 Mauser
 
25.09.16
20:09
(34) О боже, нет, как ты мог подумать!

Слышь, Serginio1, вот тебе мнение чистого, незамутненного разума с сегодняшней регистраций =)
40 infosoft-v
 
25.09.16
20:15
(33) вы уверены что dcom решит проблему получения com объекта в случае,когда внешняя обработка вызвана рег.заданием?
41 Serginio1
 
25.09.16
20:19
(40) Если он говорит что
// Так, ок. Клиент 32 бита. Выше писалось, что vbs поумолчанию запускается в 64 битном режиме. Клиент и vbs  с компонентой работают. Как-то не очень проясняется.

То проблемы с регламеннтнвым заданием который запускается как сервис аналогичны как и при запуске Exel. Нужны определенные права в DCOM. Пройдись по ссылкам в 33

(39) И тебе пройдись по ссылкам в 33. Многое для себя узнаешь.
42 infosoft-v
 
25.09.16
20:19
(36) может права этого пользователя? Фаргмент из доки

Регламентные задания всегда выполняются от имени определенного пользователя. Если пользователь регламентного задания не указан, то выполнение происходит с правами, которые определяются набором ролей, указанных в свойстве конфигурации ОсновныеРоли. В том случае, если в этом свойстве не указано ни одной роли, выполнение происходит без ограничения прав доступа.
43 infosoft-v
 
25.09.16
20:22
(41) насколько я понял, коллега на win сервере разлулил проблему с доступом к com. Он про это в первом сообщении написал.
44 Mauser
 
25.09.16
20:24
(42) Это касается пользователей 1С, и не имеет никакого отношения к пользователям ОС
45 Serginio1
 
25.09.16
20:29
41 То есть его компонента это внешний (exe) Сервер автоматизации аналогично как описанный по ссылке Excel

Хотя может и как сервис. В любом случае нужно прописывать права DCOM
46 Mauser
 
25.09.16
20:29
(41) Смилуйся, о великий носитель сакральных знаний! Твоя поэзия хуже воганской.
47 infosoft-v
 
25.09.16
20:31
(44) не спорю, предположил что у пользователя в правах может быть установка на выполнение внешних обработок в защищенном режиме.
48 Serginio1
 
25.09.16
20:31
(43) Он в топике написал, что он сделал. Еще раз рекламирую проблема с DCOM. Читайте внимательнее. Хотя word x64 ошибка на клиент сервере здесь не вышло

Пройдитесь по ссылкам. Там многие варианты рассмотрены.
49 Serginio1
 
25.09.16
20:32
Прошу прощения не ту ссылку дал
v8: Excel.Application на сервере x64
50 Mauser
 
25.09.16
20:36
(47) Нарушение прав 1С вызвало бы явное исключение 1С со вменяемым описанием и записью в журнале регистрации. Тут все кухня уровнем ниже.
51 Torquader
 
25.09.16
20:45
(49) Так сразу и скажи - "хотел познакомить пользователя с .NET", а знакомство не состоялось по причине его неспособности "вкурить" его смысл в данной задаче.
52 Serginio1
 
25.09.16
20:47
(49) Просто не ту ссылку word x64 ошибка на клиент сервере отсюда скопировал. Бывает.
Я же сразу сказал про DCOM.
53 infosoft-v
 
25.09.16
21:40
(0) про настройку прав на DCOM в Win сервере, коллега обратил внимание на:

(только эти права (при изменении) вступают в силу после перезагрузки сервера)

может в этом дело?

это из темы, на которую указал (49)
54 Serginio1
 
25.09.16
22:14
(53) Там еще по ссылкам

Подсказали решение на SQL.ru
На сервере необходимо было еще установить в локальных политиках право на запуск DCOM для конкретных пользователей.
и, о чудо, все заработало :-)


пользователь под которым запущена служба 1с должен иметь права на DCOM в целом и на ексель в частности

На самом деле проблема была в пользователе DCOM, хотя сервер и работает под пользователем винды, в DCOM он почему то пустой, пришлось принудительно установить все запуски DCOM под определенным пользователем и все заработало.
55 jetzack
 
26.09.16
08:31
Доброе утро!

За неделю времени я предлагаемые ссылки по поводу решения вопроса с Excel прошерстил. В dcomcfg на вкладке безопасность даны права на запуск конкретно пользователю винды, от которого запускается регламентное задание. Сервер 1С перегружали после этих действий.

Разрядность не может быть проблемой - если делать у кома удостоверение текущий пользователь, то в сессии залогиненого пользователя компонента создается и все работает.

Что я упускаю?
56 Mauser
 
26.09.16
09:20
Interact witch desktop?
57 Mauser
 
26.09.16
09:21
*with
58 infosoft-v
 
26.09.16
09:28
(55) Виталий, простите за занудство, перегружали сервер 1С (программу) или сервер где стоит 1С (машину)
59 Serginio1
 
26.09.16
09:47
(55) 54 Читал?

На сервере необходимо было еще установить в локальных политиках право на запуск DCOM для конкретных пользователей.
и, о чудо, все заработало :-)
60 Serginio1
 
26.09.16
09:47
пользователь под которым запущена служба 1с должен иметь права на DCOM в целом и на ексель в частности
61 Serginio1
 
26.09.16
09:58
62 jetzack
 
26.09.16
10:03
(58) 1с сервер службу
63 jetzack
 
26.09.16
10:04
(59) Пользователь в политике безопасности имеет эти права.
64 infosoft-v
 
26.09.16
10:25
(62) Есть возможность перестартануть сервер - машину?
65 infosoft-v
 
26.09.16
10:33
Возможно дело в разрядности Com объекта. Попробуйте:

Вызов 32-битных COM-объектов на стороне 64-битного сервера 1С
Книга знаний: Вызов 32-битных COM-объектов на стороне 64-битного сервера 1С
66 jetzack
 
26.09.16
10:39
(64) Сегодня ночью попробуем перегрузить сам физический сервер
67 jetzack
 
26.09.16
10:41
(65) Попробуем
68 jetzack
 
26.09.16
13:26
(65) При попытке создать обертку над компонентой происходит краш. С0000005 код ошибки - точно такая же ошибка при попытке взаимодействия с компонентой в рамках рег задания
69 infosoft-v
 
26.09.16
13:58
(68) понятно, спасибо за информацию
70 Serginio1
 
26.09.16
14:24
(68) Сама компонента экзешник? Или это сервис? или DLL?
71 jetzack
 
26.09.16
14:37
(70) exe
72 Serginio1
 
26.09.16
15:05
(71) Тогда читай 49 и все ссылки и шапку. Проблема с DCOM однозначно.
73 Serginio1
 
26.09.16
15:17
С криптографией еще есть проблема из под сервисов с поиском в хранилище сертификатов . Уже не помню

Посмотри

Криптография, как подписывать XML ?
ЭЦП, Сертификат, Подпись. Продолжение.

Но это уже к создателям этой компоненты
74 infosoft-v
 
26.09.16
15:30
(0) еще вопрос, обычное или управляемое приложение?
75 jetzack
 
26.09.16
15:58
(74) Обычное
76 Serginio1
 
26.09.16
16:31
http://ts-soft.ru/blog/wcf-authentication

По умолчанию Visual Studio использует IIS Express. Если при просмотре страницы сервиса возникает ошибка «Набор ключей не существует», то либо ваш сертификат не имеет закрытого ключа, либо учётная запись, от которой запущен IIS Express не имеет прав доступа к закрытому ключу для этого сертификата. Для сертификатов ГОСТ, если закрытый ключ хранится в реестре, права доступа можно настроить в ветке реестра HKEY_LOCAL_MACHINESOFTWAREWow6432NodeCrypto ProSettingsKeys или HKEY_LOCAL_MACHINESOFTWARECrypto ProSettingsKeys для 32-разрядной версии Windows. Кликните правой кнопкой мыши по необходимому ключу и выберите пункт Разрешения… Далее необходимо дать права учётной записи, от которой запускается IIS Express. Также, если вы разворачиваете свой сервис, например, на локальном IIS, то аналогично нужно дать права доступа к закрытому ключу учётной записи, от которой запущен пул приложений, на котором развёрнут ваш веб-сервис.
77 jetzack
 
27.09.16
08:25
(65) Перегрузили сервер - не помогло
78 infosoft-v
 
28.09.16
11:08
информация от разработчиков 1С Предприятия:

====================
Выполнение кода встроенного языка на сервере 1С:Предприятия отличается от выполнения кода на клиенте:

- другим пользователем, от которого запущено приложение 1С:Предприятия 8.2 (usr1cv82 вместо интерактивного пользователя);

- другой разрядностью приложения 1С:Предприятия 8.2 (64 вместо 32);

- другой потоковой моделью доступа к COM объекту в приложении 1С:Предприятия 8.2 (multithreaded apartment вместо main single-threaded apartment).
====================

Первый и второй пункт разобрали.
Может влияние третьего пункта?
79 Torquader
 
28.09.16
11:38
А чем вам третье-то помешало.
Если заявлено многопоточное окружение, то это влияет только на локальные COM-сервера - если у вас exe-файл, то к нему всё равно идёт маршалинг и одновременного доступа быть не может.
80 Serginio1
 
28.09.16
12:01
(78) Потоковая модель имеет значение для внутренних серверов.
Для внешних никакого отношения не имеет.
Пусть проверят у себя при запуске из под сервиса. Проблема скорее всего у них внутри.
81 infosoft-v
 
28.09.16
12:07
в (78) разработчик платформы привёл отличия исполнения кода в клиенте и на сервере 1С Предприятия. У jetzack код под клиентом корректно работает с exe com объектом а при запуске регламентного задания на сервере 1С Предприятие не работает.

так как пункты 2 и 3 с подозрения сняты, получается, остается только пункт 1
82 jetzack
 
28.09.16
15:05
Попробовали на тестовом сервере - все работает =(
То есть дело в безопасности.

В dcomcnfg на вкладке безопасность запускающий пользователь указан.

В (49) указано, что на Server 2008 недостаточно указать этих настроек, но и еще
"На сервере необходимо было еще установить в локальных политиках право на запуск DCOM для конкретных пользователей."

Но в локальных политиках безопасности как-то не очевидно, где спрятаны эти настройки.
83 jetzack
 
29.09.16
16:17
Проблему решить не удалось.
Смущает тот момент, что обертка в 2008 сервере не создается и ошибка с0000005 - точно такая, как при работе в рег задании.

При этом на сервере 2003 и рег задание корректно работает и обертка создается.

Все-таки безопасность тут не причем, а собака зарыта где-то между запуском 1с рег заданий и взаимодействия с 32-ух битными компонентами exe  и самой компонентой.

Вышли из ситуации - запуск в планировщике Windows 1с клиента с указанием внешней обработки, которая дергает нужный код.

Всем большое спасибо за участие!
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший