|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Мое почтение всем и заранее спасибо. Сервис, написанный на ДотНете, обращается к Ворду. Вот код: Код: vbnet 1. 2. 3.
Код срабатывает без ошибок, но после него остается o.Documents.Count = 0. Как это вылечить? Если я пытаюсь открыть тот же файл в Ворде вручную, то всё получается. Сервис бежит под тем же юзером, под которым я логинюсь сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2014, 19:50 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Привет, Саныч. а проверяешь ты Count немедленно, сразу за Add? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2014, 23:03 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
А у тебя создается ли вообще документ на этом шаблоне? путь правильный, ошибок не возникает? Если это выполнить не в сервисе, а в обычном winforms приложении? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2014, 23:26 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Shocker.ProА у тебя создается ли вообще документ на этом шаблоне? На каком шаблоне? Не понял вопроса. Shocker.Proпуть правильный, ошибок не возникает? Это я вроде уже написал: код отрабатывает без ошибок, тот же файл вручную открывается без проблем. Shocker.ProЕсли это выполнить не в сервисе, а в обычном winforms приложении? Попробую, доложу. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 00:29 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, Microsoft не рекомендует и не поддерживает Server-side Automation Офисных приложений. Тем не менее, чтобы код работал при открытии документа через сервис, необходимо указать в настройках DCOM - Interactive User, а именно Component Service -> Computers -> My Computer -> DCOM Config -> Microsoft Word Application -> Properties -> Identity -> The interactive user. Если Microsoft Word Application отсутствует в списке, то можно добавить соответствующий ключ в реестер вручную или как рекомендуется здесь . Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 01:37 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
iMrTidyMicrosoft не рекомендует и не поддерживает Server-side Automation Офисных приложений. У меня нет выхода - сервер должен создавать файлы Ворда. iMrTidyЕсли Microsoft Word Application отсутствует в списке, то можно добавить соответствующий ключ в реестер вручную или как рекомендуется здесь . Интуитивно кажется, что это именно то, что мне нужно. Заранее большое-большое спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 02:02 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, Начиная с Office 2007, Microsoft использует формат Open XML, который позволяет работать с файлами офиса без участия самого Офиса. Для этих целей в .Net Framework существует Open XML Format SDK . ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 02:29 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычНа каком шаблоне? Не понял вопроса.Для Documents.Add первый параметр - это имя шаблона.Владимир Санычтот же файл вручную открывается без проблем.Открыть файл вручную и создать новый на основе его, как шаблона - не совсем одно и то жеВладимир СанычПопробую, доложу.тогда не очень понятно, где этот код работает. если ты не пробовал ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 10:29 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
iMrTidyНачиная с Office 2007, Microsoft использует формат Open XML, который позволяет работать с файлами офиса без участия самого Офиса. Для этих целей в .Net Framework существует Open XML Format SDK . Понятно, благодарю, попробую изучить. Но это пойдет на будущее. Сейчас я пытаюсь установить на сервере уже существующую систему. Shocker.ProДля Documents.Add первый параметр - это имя шаблона. Упс... Век живи, век учись. Интересно, что программа-то работает правильно. Я делаю вот такой Add, потом всякое редактирование в файле и в конце SaveAs. Shocker.Proтогда не очень понятно, где этот код работает. если ты не пробовал Работает на других серверах. Сейчас ставлю на очередной сервер и уткнулся. === Отчет о проделанной работе будет чуть позже. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 12:00 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
iMrTidyЕсли Microsoft Word Application отсутствует в списке, то можно добавить соответствующий ключ в реестер вручную или как рекомендуется здесь . Пытаюсь сделать то, что там написано. Дошел до слов WINWORD.EXE –REGSERVER. Открывается Ворд и выдает сообщение о том, что файл –REGSERVER.doc не найден. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 17:08 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычiMrTidyЕсли Microsoft Word Application отсутствует в списке, то можно добавить соответствующий ключ в реестер вручную или как рекомендуется здесь . Пытаюсь сделать то, что там написано. Дошел до слов WINWORD.EXE –REGSERVER. Открывается Ворд и выдает сообщение о том, что файл –REGSERVER.doc не найден. Возможно команда должна быть winword.exe /r ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 17:20 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Запустил эту команду. На экране какой-то процесс пробежал. Но Ворда в списке нет, и исходная проблема тоже не решилась. Перезагрузить сервер уже пробовал. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 17:53 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычЗапустил эту команду. На экране какой-то процесс пробежал. Но Ворда в списке нет, и исходная проблема тоже не решилась. Перезагрузить сервер уже пробовал. Тогда можно прописать ключ вручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 18:59 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
А почему в файле написано Excel? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 19:46 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычА почему в файле написано Excel? Прошу прощения, mea culpa, это был изначально аналогичный ключ для Excel. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 22:23 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Я так и подумал. Еще раз спасибо, проверка последует завтра. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2014, 22:54 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Увы и увы. Ворд в списке появился, и в свойствах у него отмечено The interactive user. Но по-прежнему o.Documents.Count = 0. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 13:04 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, Возможно интерактивный пользователь не имеет соответсвующих прав на запуск COM, вкладка Security -> Configuration Permissions -> Edit -> интерактивный пользователь должен иметь "Full Control". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 13:22 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Дал Full control юзеру INTERACTIVE (хотя до того был Full control у группы Administrators, в которую входит юзер, под которым бежит сервис). Заменил o.Documents.Add на o.Documents.Open. Нифига. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 13:53 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычДал Full control юзеру INTERACTIVE (хотя до того был Full control у группы Administrators, в которую входит юзер, под которым бежит сервис). Заменил o.Documents.Add на o.Documents.Open. Нифига. Если не используются, например, такие события как открытие документа, т.е. связанные непосредственно с документом, то Add или Open в таком случае не играет роли. Проверьте настройки COM Security для My Computer как указано на картинке. Какая версия и битность Офиса и ОС? Разрешены ли макросы для интерактивного пользователя? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 14:43 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Local Access - Everyone - Allow Remote Access - Everyone - Allow Local Launch - Everyone - Allow Remote Launch - Everyone ничего, но зато Administrators - Allow Local Activation - Everyone - Allow Remote Activation - Everyone ничего, но зато Administrators - Allow Windows 2008, 64 bit Word 2007, где у него About я не нашел Макросы - если речь о том, что задается в самом Ворде под рубрикой Trust Center, то открыто по максимуму. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 17:09 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычLocal Access - Everyone - Allow Remote Access - Everyone - Allow Local Launch - Everyone - Allow Remote Launch - Everyone ничего, но зато Administrators - Allow Local Activation - Everyone - Allow Remote Activation - Everyone ничего, но зато Administrators - Allow Windows 2008, 64 bit Word 2007, где у него About я не нашел Макросы - если речь о том, что задается в самом Ворде под рубрикой Trust Center, то открыто по максимуму. Предлагаю попробовать добавить интерактивного пользователя со всеми возможными правами отдельно как в Microsoft Word Application, так и в My Computer, чтобы окончательно исключить подозрение на права доступа пользователя. Версию можно увидеть, например, в Word при нажатии кнопки Office -> Options -> Resources -> About. Если окажется, что версия 64 бита, то Component Services нужно запускать соответственно через mmc -64 со всеми вытекающими, ну а если нет, то mmc -32. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 21:34 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
ОК. Версию увижу завтра. А что значит добавить пользователя в Ворде? Я умею добавлять пользователей только в Аксессе. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2014, 22:09 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычОК. Версию увижу завтра. А что значит добавить пользователя в Ворде? Я умею добавлять пользователей только в Аксессе. Я имел в виду в DCOM -> Microsoft Word Application -> Properites -> Security. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 00:33 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
То есть не полагаться на права, которые заданы для INTERACTIVE? Или для Everyone и Administrators тоже? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 01:02 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычТо есть не полагаться на права, которые заданы для INTERACTIVE? Или для Everyone и Administrators тоже? Да, я предлагаю задать права доступа, что называется явным образом. Ведь согласитесь, что есть разница как запускать, например, cmd As Administrator или просто, даже если пользователь сам по себе администратор. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 02:10 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
iMrTidyВерсию можно увидеть, например, в Word при нажатии кнопки Office -> Options -> Resources -> About. Нашел. Ничего не сказано, нет ни слова 32, ни слова 64. Зато!!! Я наконец сделал то, что было спрошено здесь: Shocker.ProЕсли это выполнить не в сервисе, а в обычном winforms приложении? Так вот. Не в сервисе - оно работает! Хоть с Open, хоть с Add. И даже без всякого Run as Administrator. А в сервисе не заработало даже тогда, когда системщик запустил сервис под админом сети. То есть понятно одно - дело не в Ворде. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 17:18 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
ну хорошо, ты с помощью Add получаешь ссылку на новоиспеченный объект. а она действительна? делать ты с ним что-то можешь? имя, например, прочитать... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 17:21 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычТо есть понятно одно - дело не в Ворде. Точнее: не в правах на уровне Ворда. А в том, что Ворд не открывает файлы, будучи запущен из-под сервиса. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 17:22 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Shocker.Proну хорошо, ты с помощью Add получаешь ссылку на новоиспеченный объект. а она действительна? делать ты с ним что-то можешь? имя, например, прочитать... Сейчас проверю. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 17:24 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Сделал MsgBox(o.ActiveDocument.Words.Count). Работает. Похоже, что всё работает. Только не из-под сервиса. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 17:38 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
ой, где ты подцепил эту дрянь ? ))) Add возвращает ссылку на объект, с ней и работай. Владимир СанычТолько не из-под сервиса.а из под сервиса? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 17:41 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Shocker.Proой, где ты подцепил эту дрянь ? ))) Add возвращает ссылку на объект, с ней и работай. ОК, буду иметь в виду на будущее. Но сейчас мне это никак не поможет. Shocker.Proа из под сервиса? См. сабж. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 17:44 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычСм. сабж.Так а что происходит-то при попытке обратиться к свойству (только не через ActiveDocument)? Исключение? А какой текст ошибки? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 17:47 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, Битность офиса можно проверить, если посмотреть как отображется процесс, например, для Word в Task Manager. Дело, конечно, не в Word, исходя из того, что уже вначале было указано, что вручную файл работает, плюс была проверена политика безопасности макросов. Если DCOM настроен правильно, а сомнения все еще есть, то причина в сервисе. Проверил на одном из серверов: - Сервис явно запущен от имени интерактивного пользователя, т.е. с указанием имени и пароля. - Интерактивный пользователь явно указан в Component Services (My Computer и Microsoft Excel Application) со всеми необходимыми правами доступа. Если же причина в сервисе, то можно попробовать написать как можно более подробный лог. В том или ином случае дожна проявится ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 18:16 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Shocker.ProТак а что происходит-то при попытке обратиться к свойству (только не через ActiveDocument)? Исключение? А какой текст ошибки? Могу попробовать. К какому свойству обращаться? iMrTidyЕсли же причина в сервисе, то можно попробовать написать как можно более подробный лог. Лог чего? У меня открыт отладчик, я могу делать пошаговую отладку и проверять что угодно. Только бы знать, что проверять. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 19:48 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычМогу попробовать. К какому свойству обращаться?Name ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 19:49 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, Windows Service не может быть стартовым проектом в режиме Debug. Как происходит тестирование/отладка? Word не работает в режиме Debug? Как ведет себя сервис, если его установить? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 22:40 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Сервис как раз установлен. Я в отладчике присоединяюсь к его процессу и попадаю в исходный код, который предусмотрительно скопирован на сервер. Ворд, полагаю, работает в обычном режиме, потому что он не откомпилирован с возможностью дебага, в отличие от моего сервиса. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 22:49 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычСервис как раз установлен. Я в отладчике присоединяюсь к его процессу и попадаю в исходный код, который предусмотрительно скопирован на сервер. Ворд, полагаю, работает в обычном режиме, потому что он не откомпилирован с возможностью дебага, в отличие от моего сервиса. При таком способе debugging может повлиять на исполнение кода, по-крайней мере ряд вещей (GC, load/unload dll, DCOM) станут намного медленнее, все зависит конечно от самого кода, полагаю, что этот момент учтен. Можно попробовать поставить breakpoint на строку создания Word и параллельно отслеживать в Task Manager, создается ли процесс winword и как меняется объем занимамоей памяти. В Studio смотреть, что просиходит с переменными, особенно на строке с documents.add(...). Вопрос о правах доступа интерактивного пользователя все еще открыт. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2014, 00:10 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
iMrTidyряд вещей (GC, load/unload dll, DCOM) станут намного медленнее Ну и что? iMrTidyМожно попробовать поставить breakpoint на строку создания Word и параллельно отслеживать в Task Manager, создается ли процесс winword и как меняется объем занимамоей памяти. Создается. Без отладчика дальше программа летит на обращении к ActiveDocument, которого нет, и процесс Ворда остается незакрытый. А поскольку это в цикле, то за минуту вся доступная память заполняется процессами Ворда, CPU доходит до 100% и я начинаю звонить системщику, чтобы он перезапустил сервер. Интересно то, что каждый из запущенных процессов потом живет своей жизнью и сам увеличивает свое использование CPU. С отладчиком всё проще: я останавливаюсь до обращения к ActiveDocument и вижу, что Documents.Count = 0. ...Мысль. А не может быть, что они бегут асинхронно и открывают этот файл каждый у себя уже после того, как управление вернулось в мою программу и она полетела? Надо будет посмотреть, не создаются ли на диске файлы с тильдой. iMrTidyВ Studio смотреть, что просиходит с переменными, особенно на строке с documents.add(...). С какими конкретно переменными? Мои переменные на этой строке меняться не должны. А объекты Ворда... На какой из них смотреть? iMrTidyВопрос о правах доступа интерактивного пользователя все еще открыт. Почему в обычной программе (не сервисе) всё работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2014, 00:47 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Санычдальше программа летит на обращении к ActiveDocument, которого нет, и процесс Ворда остается незакрытый..... в цикле, то за минуту вся доступная память заполняется процессами ВордаСаныч, никак не пойму, у тебя нет там отлова исключения? Поймал исключение - закрой Ворд через Quit, освободи переменную и дальше разбирайся, зачем звонить системщику? И все же - что за исключение там возникает? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2014, 01:04 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Shocker.Proу тебя нет там отлова исключения? Есть отлов исключений, которые могут происходить при реальной работе программы. То, что летит в процессе кривой установки, ловится вручную. Shocker.ProИ все же - что за исключение там возникает? Где? При обращении к ActiveDocument не помню формулировку, но она и не важна, потому что глазами видно, что ActiveDocument отсутствует. А строчкой выше, на Add или Open, никакого исключения нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2014, 01:15 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычПри обращении к ActiveDocument не помню формулировку, но она и не важнада причем тут ActiveDocument - не пользуйся ты этой дрянью Код: vbnet 1. 2.
ты хочешь сказать, что первая строка выполняется без исключения, а переменная MyDoc=Nothing? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2014, 01:27 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Shocker.Proда причем тут ActiveDocument - не пользуйся ты этой дрянью Дык, какая разница? Если коллекция Documents пуста, то к ее элементу как ни обращайся, его там все равно нет. Shocker.Pro Код: vbnet 1. 2.
ты хочешь сказать, что первая строка выполняется без исключения, а переменная MyDoc=Nothing? Именно такой вариант я смогу попробовать завтра. Но всё говорит о том, что именно так и будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2014, 01:45 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Работа в этом направлении временно приостановлена. Начальство решило попросить другой сервер. Лично мне кажется, что я через несколько дней приду к той же точке, но начальству виднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2014, 12:56 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
"Жаль, что нам так и не удалось послушать начальника транспортного цеха" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2014, 12:58 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Таки жаль. Так что спасибо всем за сочувствие и соучастие, но мне кажется, что скоро придется продолжить. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2014, 13:48 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Господа, я вернулся. Новый сервер нам не дали. Сказали, что это виртуальная машина и от ее переустановки ничего не изменится. Так что я продолжаю. iMrTidyПредлагаю попробовать добавить интерактивного пользователя со всеми возможными правами отдельно как в Microsoft Word Application, так и в My Computer, чтобы окончательно исключить подозрение на права доступа пользователя. Прописал во всех возможных местах явным образом того юзера, под которым запускается сервис. Включая задание прав для этого конкретного юзера. Ничего не изменилось. Shocker.ProТак а что происходит-то при попытке обратиться к свойству (только не через ActiveDocument)? Исключение? А какой текст ошибки? Сделал так: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Прохожу пошагово. Никакой ошибки не возникает ни на Open, ни на Add. Оба раза вижу, что x = Nothing. Тупик, господа. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 13:24 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, Та же самая программа и Word работают на других серверах? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 20:50 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
iMrTidyТа же самая программа и Word работают на других серверах? Так точно. Совершенно верно. Именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 21:11 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, Версия Windows и Office тоже такие же? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2014, 21:34 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Не имею возможности проверить, но Офис оба раза 2007, а вот Windows тут 2008, а там, где работает, кажется, 2003. Еще одна деталь. Программка, которая не сервис и работает, при запуске через Scheduler тоже не работает. Может быть, это какая-то новая политика в 2008... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2014, 00:25 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир СанычГоспода, я вернулся. Новый сервер нам не дали. Сказали, что это виртуальная машина и от ее переустановки ничего не изменится. Так что я продолжаю. iMrTidyПредлагаю попробовать добавить интерактивного пользователя со всеми возможными правами отдельно как в Microsoft Word Application, так и в My Computer, чтобы окончательно исключить подозрение на права доступа пользователя. Прописал во всех возможных местах явным образом того юзера, под которым запускается сервис. Включая задание прав для этого конкретного юзера. Ничего не изменилось. Shocker.ProТак а что происходит-то при попытке обратиться к свойству (только не через ActiveDocument)? Исключение? А какой текст ошибки? Сделал так: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Прохожу пошагово. Никакой ошибки не возникает ни на Open, ни на Add. Оба раза вижу, что x = Nothing. Тупик, господа. Саныч, вот кусочек из одной программки "на ворде", за которой мне иногда приходится присматривать: (обрати внимание на текст, который я выписывал 25 мая 2012 года, вывесив язык набок от усердия). Код: vbnet 1. 2. 3. 4. 5. 6.
Я скромно предполагаю, что это точно твой, что это твой случай. PS а я, между прочим, лестицу до сих пор перидически просматриваю. Все жду советовательного ответа на свой вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2014, 00:56 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
ух ты, последним постом форум сломал - нажал отправить, а в ответ топик засиял сонмом привидений, по штуке в каждом сообщении над ником автора сообщения. сила ворда, етить... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2014, 00:59 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
вот теперь я понял, в чем сила открытого кода - в безопасноти. Эхь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2014, 01:01 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
boobyДобавьте местоположение файла в список безопасных. Рад тебя видеть. И что я должен делать, получив сам от себя такое сообщение? Что это за список безопасных местоположений и как в него добавляют? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2014, 10:16 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Господа! Решение найдено. Я поднял на уши не только форум, но и фирму, в которой работаю, и мне здесь коллеги нашли правильную ссылку. Вот она (точнее, две): http://stackoverflow.com/questions/1006923/automating-office-via-windows-service-on-server-2008 http://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows-server-2008-x64?forum=innovateonoffice В двух словах решение следующее. Надо просто создать две папки: C:\Windows\System32\config\systemprofile\Desktop C:\Windows\SysWOW64\config\systemprofile\Desktop Это невозможно вывести из общих знаний, сколь бы глобальными они ни были. Спасибо всем за потраченное на меня время. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2014, 12:15 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Поздравляю - да уж! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2014, 12:23 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Спасибо. Оно того стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2014, 12:54 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Хаха, господа. Еще один человек в нашей фирме столкнулся с той же проблемой. Его направили за решением прямо ко мне. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2014, 18:30 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Господа, проблема вернулась. Другой сервер. Сделал то, что написано в этом топике. Если раньше программа проходила строчку Documents.Add без ошибок, но документ не добавлялся, то теперь я получаю ошибку на этой строчке, а потом на еще одной: ошибкиThe remote procedure call failed. (Exception from HRESULT: 0x800706BE) at Microsoft.Office.Interop.Word.Documents.Add(Object& Template, Object& NewTemplate, Object& DocumentType, Object& Visible) The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) at Microsoft.Office.Interop.Word.ApplicationClass.Quit(Object& SaveChanges, Object& OriginalFormat, Object& RouteDocument) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 13:03 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
iMrTidyЕсли Microsoft Word Application отсутствует в списке, то можно добавить соответствующий ключ в реестер вручную или как рекомендуется здесь . Трудно сказать, отсутствует или нет. В списке есть вот что: Microsoft Office Word 97 - 2003 Document При этом сам Ворд - 2007. Я попытался сделать то, что написано по ссылке. Открылся Ворд и сказал мне: This file could not be found. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 14:07 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, авторHRESULT: 0x800706BE а что поменялось в системе - версия ос новая установлена, патч какой безопасный поставили, или что? авторMicrosoft Office Word 97 - 2003 Document ну, если физически регистрация ворда не "слетела", может быть, окажется достаточным на вкладке настроек dcom для авторMicrosoft Office Word 97 - 2003 Document сказать: а) что ему,[Microsoft Office Word 97 - 2003 Document], разрешено взаимодействие с рабочим столом (это третья вкладка настроек в "современной" панельке, по памяти). б) дать явные права на запуск конкретно для того пользователя, от имени которого стартует "сервис" (вторая вкладка, по памяти...). (Слово "сервис" взято в кавычки, т.к. с точки зрения использующего кода это может выглядеть как "обычная автоматизация". Но если "обычная автоматизация" запускается из-под сервиса, то сама работает в условиях "сервиса") ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 18:27 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, посмотри http://support.microsoft.com/kb/960007/en ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 18:46 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
boobyа что поменялось в системе - версия ос новая установлена, патч какой безопасный поставили, или что? Другой заказчик, другой сервер. boobyа) что ему,[Microsoft Office Word 97 - 2003 Document], разрешено взаимодействие с рабочим столом (это третья вкладка настроек в "современной" панельке, по памяти). Попробую, об исполнении доложу. Правда, сомнительно мне... boobyб) дать явные права на запуск конкретно для того пользователя, от имени которого стартует "сервис" (вторая вкладка, по памяти...). Это я уже несколько раз менял туда-сюда. Разные источники предлагают делать то так, то Interactive user. boobyВладимир Саныч, посмотри http://support.microsoft.com/kb/960007/en Это я уже видел. You must have Windows Server 2003 SP2 installed to apply this hotfix. А у меня 2012. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 20:11 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, авторРазные источники предлагают делать то так, то Interactive user. не-не. "то так, то интеракив юзер" - это читать надо так: В настройках систем разных версий птички, касательные запуска сеанса могут отличаться по своему составу. Во всех случаях есть птички, описывающие, от имени какого пользователя запущен сервис. В старых версиях - есть отдельная птичка "interactive user". В "новых версиях" на отдельной вкладке описывается пользователь, от имени которого запускается сервис, а на другой вкладке дается отдельное специальное разрешение для приложения, запущенного сервисом от имени заказанного пользователя общаться с рабочим столом. Пусть у тебя есть некий сервис S, использующий твою автоматизацию и запускаемый от имени пользователя U. тогда для компонента [Microsoft Office Word 97 - 2003 Document], а также компонента [Документ Microsoft Office Word 2007 с включенными макросами] (и т.п. найденными) ты б) даешь явные разрешения на запуск таких компонентов через dcom от имени пользователя U и, а) на закладках настроек доступа к рабочему столу, ставишь птичку, разрешающую такому, запущенному через dcom от имени пользователя U компоненту, общение с рабочим столом. Там не ineractive user, а какой-нибудь desktop communication (или а-ля) будет написан. Кроме того, в) в самом ворде местоположение шаблона предпочтительно явно пометить как безопасное. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 00:13 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
iMrTidyА Word вручную в принципе открвыается? Конечно. Если бы не открывался, я бы не такие вопросы задавал. iMrTidyМожет быть это поможет? Попробую, доложу. Спасибо. boobyВ настройках систем разных версий птички, касательные запуска сеанса могут отличаться по своему составу. Да не. Я гуглю разные лекарства от моей проблемы. И где-то советуют зайти и переставить так, а где-то наоборот. boobyв) в самом ворде местоположение шаблона предпочтительно явно пометить как безопасное. А это я уже не первый раз вижу, но все равно не понимаю, как и где. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 00:43 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, авторА это я уже не первый раз вижу, но все равно не понимаю, как и где. визуалка у 2007, 2010 и 2013 отличается. Поэтому первый клик по разным местам делать придется. В 2013 - это пункт меню Файл, потом клик в "Центр безопасности", в 2007м, вероятно, первый клик по блямбе в верхнем левом углу с ново-офисной иконой (не помню как она называется - быстрый доступ не знаю к чему). Но ключевые слова остаются одинаковыми. Надо достичь того, что названо "Центр безопасности". Там встретятся термины (списки) двух сортов - "безопасные документы" и "безопасные местоположения". Я бы предложил сосредоточиться на "безопасных местоположениях", т.к. в них - все документы безопасны. Если твой каталог с шаблонами - сетевой, то его не получится добавить в список безопасных местоположений до тех пор, пока не выставлена птица "разрешить безопасные местоположения в сети". Есть еще одна штука. Если все вышеперечисленное (настройки dcom+настройки безопасных местоположений) выполнено, это не значит, что твой код не скажет fail. Достоверно известно, что если твоя автоматизация создает на лету в свежеиспекаемом документе модули кода vba с целью обеспечения дальнейшей независимой от сторонних надстроек автоматизации, привязанной к этому конкретному документу, то необходимо также взвести птицу "доверять доступ к проектам VBA". Эта птица живет в центре безопасности, где-то в макросы-безопасность макросов. Кроме того, мои "наблюдашки" показывают, что эту птицу следует выставить не только когда ты явно генерируешь код VBA в верстаемом документе, но и тогда, когда твоя автоматизация открывает шаблон/документ с уже зафиксированным в таком документе кодом vba. Я не знаю как технически правильно описать происходящее. На пальцах - похоже на то, что открытие такого документа (с самостоятельным vba-кодом) после подъема автоматизации, работающей в контексте текущего Word.Application (Excel.Application etc), изменяет состояние списка наличных vba-проектов и самого этого факта достаточно, чтобы сказать Fail, если птица доверия доступа к vba-проектам не выставлена. Т.е. (на примере Excel) пусть твоя автоматизация организована так: 1) Некий сервис S выполняет запуск файла пускач.vbs 2) в файле пускач.vbs код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
И последнее - если автоматизация "правильно сделана" - настройки типа "уровень безопасности макросов" можно оставить в покое. Все сработает как надо без их ворошения. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 02:23 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
booby, ну фу же, какая бяка... бее.. авторКроме того, мои "наблюдашки" показывают, что эту птицу следует выставить не только когда ты явно генерируешь код VBA в верстаемом документе, но и тогда, когда твоя автоматизация открывает шаблон/документ с уже зафиксированным в таком документе кодом vba. Если ты, дорогуша, открываешь шаблон с кодом , то в созданный по шаблону документ, vba-код переносится автоматически. А это, креативный ты наш, и есть та самая "генерация vba-кода в новом документе на лету". Наблюдашкин ты или нет, а без птички доверия к vba-проектам жить не сможешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 02:35 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, Сорри. я тут сам с собой про Excel поговорил. О котором никто не спрашивал. Мне бы надо чаще спать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 02:51 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Итак, первый доклад о результатах. Нашел Trusted locations и добавил туда место, из которого я открываю файлы (а заодно и то, в которое сохраняю). Хорошая новость. Ошибки исчезли! Код проходится без ошибок. Плохая новость. Файл, который создается моим кодом, не открывается в Ворде. Хотя я отлаживаю на примере, в котором файл должен просто открываться и сразу сохраняться командой Save As. И размер этого файла вышел примерно вдвое больше, чем у исходного. Не знаю, продолжение ли это тех же проблем или я чего-то напутал в своих настройках. На всякий случай прилагаю и исходный файл, и созданный программой. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 12:48 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Владимир Саныч, А что нужно увидеть в этих файлах? Дома у меня только 2003й ворд с приделанной читалкой docx-файлов. Мой 2003й одинаково успешно открывает оба файла, и показывает их без видимых визуальных различий. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 15:14 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
повторно: пока вижу следующее: а) оба файла одинаково успешно открываются моим 2003м вордом. б) структурно файлы разные - test.docx - это честный docx, с текстом документа в виде xml а -1411291139551-01.docx вместо xml-содержимого документа, содержит в себе двоичный поток WordDocument. Попробуй перименовать этот файл в -1411291139551-01.docb Это может помочь "открыть" его. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 16:00 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Да, спасибо. Если его переименовать в doc (что такое docb, я не знаю), то он открывается. То есть у меня строится файл doc, но с расширением docx. Буду рыть в сторону тупых ошибок в настройках моей системы. Ишо раз спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 16:13 |
|
Documents.Count = 0
|
|||
---|---|---|---|
#18+
Нашел последнюю тупую ошибку, но не в настройках, а в программе. Когда я сохраняю файл, то я всегда это делал так: ...ActiveDocument.SaveAs(..., Word.WdSaveFormat.wdFormatDocument) И это работало! Даже на том сервере, в связи с которым я задавал вопросы в этом топике в феврале, это до сих пор работает и создает файлы в формате docx. Однако я сейчас нагуглил, что wdFormatDocument - это формат doc, а для docx надо писать wdFormatDocument Default ! Написал wdFormatDocumentDefault, откомпилировал - и всё заработало как надо. Чем тот сервер отличается от этого, я не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2014, 01:16 |
|
|
start [/forum/topic.php?all=1&fid=61&tid=2173734]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
105ms |
get tp. blocked users: |
2ms |
others: | 310ms |
total: | 492ms |
0 / 0 |