powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Documents.Count = 0
78 сообщений из 78, показаны все 4 страниц
Documents.Count = 0
    #38546508
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мое почтение всем и заранее спасибо.

Сервис, написанный на ДотНете, обращается к Ворду. Вот код:

Код: vbnet
1.
2.
3.
Dim o As Word.Application
o = New Word.Application
o.Documents.Add("c:\tmp\test.docx")


Код срабатывает без ошибок, но после него остается o.Documents.Count = 0. Как это вылечить?

Если я пытаюсь открыть тот же файл в Ворде вручную, то всё получается. Сервис бежит под тем же юзером, под которым я логинюсь сам.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38546639
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, Саныч.
а проверяешь ты Count немедленно, сразу за Add?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38546650
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38546663
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у тебя создается ли вообще документ на этом шаблоне? путь правильный, ошибок не возникает?

Если это выполнить не в сервисе, а в обычном winforms приложении?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38546679
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProА у тебя создается ли вообще документ на этом шаблоне?
На каком шаблоне? Не понял вопроса.

Shocker.Proпуть правильный, ошибок не возникает?
Это я вроде уже написал: код отрабатывает без ошибок, тот же файл вручную открывается без проблем.

Shocker.ProЕсли это выполнить не в сервисе, а в обычном winforms приложении?
Попробую, доложу.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38546708
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

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 отсутствует в списке, то можно добавить соответствующий ключ в реестер вручную или как рекомендуется здесь .

Удачи!
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38546716
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyMicrosoft не рекомендует и не поддерживает Server-side Automation Офисных приложений.
У меня нет выхода - сервер должен создавать файлы Ворда.

iMrTidyЕсли Microsoft Word Application отсутствует в списке, то можно добавить соответствующий ключ в реестер вручную или как рекомендуется здесь .
Интуитивно кажется, что это именно то, что мне нужно. Заранее большое-большое спасибо.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38546718
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

Начиная с Office 2007, Microsoft использует формат Open XML, который позволяет работать с файлами офиса без участия самого Офиса. Для этих целей в .Net Framework существует Open XML Format SDK .
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38546858
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычНа каком шаблоне? Не понял вопроса.Для Documents.Add первый параметр - это имя шаблона.Владимир Санычтот же файл вручную открывается без проблем.Открыть файл вручную и создать новый на основе его, как шаблона - не совсем одно и то жеВладимир СанычПопробую, доложу.тогда не очень понятно, где этот код работает. если ты не пробовал
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38546970
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyНачиная с Office 2007, Microsoft использует формат Open XML, который позволяет работать с файлами офиса без участия самого Офиса. Для этих целей в .Net Framework существует Open XML Format SDK .
Понятно, благодарю, попробую изучить. Но это пойдет на будущее. Сейчас я пытаюсь установить на сервере уже существующую систему.

Shocker.ProДля Documents.Add первый параметр - это имя шаблона.
Упс... Век живи, век учись. Интересно, что программа-то работает правильно. Я делаю вот такой Add, потом всякое редактирование в файле и в конце SaveAs.

Shocker.Proтогда не очень понятно, где этот код работает. если ты не пробовал
Работает на других серверах. Сейчас ставлю на очередной сервер и уткнулся.

===
Отчет о проделанной работе будет чуть позже.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38547435
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyЕсли Microsoft Word Application отсутствует в списке, то можно добавить соответствующий ключ в реестер вручную или как рекомендуется здесь .
Пытаюсь сделать то, что там написано. Дошел до слов WINWORD.EXE –REGSERVER. Открывается Ворд и выдает сообщение о том, что файл –REGSERVER.doc не найден.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38547450
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычiMrTidyЕсли Microsoft Word Application отсутствует в списке, то можно добавить соответствующий ключ в реестер вручную или как рекомендуется здесь .
Пытаюсь сделать то, что там написано. Дошел до слов WINWORD.EXE –REGSERVER. Открывается Ворд и выдает сообщение о том, что файл –REGSERVER.doc не найден.

Возможно команда должна быть winword.exe /r
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38547502
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запустил эту команду. На экране какой-то процесс пробежал. Но Ворда в списке нет, и исходная проблема тоже не решилась. Перезагрузить сервер уже пробовал.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38547621
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычЗапустил эту команду. На экране какой-то процесс пробежал. Но Ворда в списке нет, и исходная проблема тоже не решилась. Перезагрузить сервер уже пробовал.

Тогда можно прописать ключ вручную.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38547664
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему в файле написано Excel?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38547831
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычА почему в файле написано Excel?

Прошу прощения, mea culpa, это был изначально аналогичный ключ для Excel.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38547857
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так и подумал. Еще раз спасибо, проверка последует завтра.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38548457
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увы и увы. Ворд в списке появился, и в свойствах у него отмечено The interactive user. Но по-прежнему o.Documents.Count = 0.

...
Рейтинг: 0 / 0
Documents.Count = 0
    #38548488
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

Возможно интерактивный пользователь не имеет соответсвующих прав на запуск COM, вкладка Security -> Configuration Permissions -> Edit -> интерактивный пользователь должен иметь "Full Control".
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38548557
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дал Full control юзеру INTERACTIVE (хотя до того был Full control у группы Administrators, в которую входит юзер, под которым бежит сервис).

Заменил o.Documents.Add на o.Documents.Open.

Нифига.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38548676
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычДал Full control юзеру INTERACTIVE (хотя до того был Full control у группы Administrators, в которую входит юзер, под которым бежит сервис).

Заменил o.Documents.Add на o.Documents.Open.

Нифига.

Если не используются, например, такие события как открытие документа, т.е. связанные непосредственно с документом, то Add или Open в таком случае не играет роли.

Проверьте настройки COM Security для My Computer как указано на картинке.

Какая версия и битность Офиса и ОС?
Разрешены ли макросы для интерактивного пользователя?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38549044
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, то открыто по максимуму.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38549420
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч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.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38549440
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК. Версию увижу завтра.

А что значит добавить пользователя в Ворде? Я умею добавлять пользователей только в Аксессе.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38549524
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычОК. Версию увижу завтра.

А что значит добавить пользователя в Ворде? Я умею добавлять пользователей только в Аксессе.

Я имел в виду в DCOM -> Microsoft Word Application -> Properites -> Security.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38549541
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть не полагаться на права, которые заданы для INTERACTIVE? Или для Everyone и Administrators тоже?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38549581
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычТо есть не полагаться на права, которые заданы для INTERACTIVE? Или для Everyone и Administrators тоже?

Да, я предлагаю задать права доступа, что называется явным образом. Ведь согласитесь, что есть разница как запускать, например, cmd As Administrator или просто, даже если пользователь сам по себе администратор.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38550729
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyВерсию можно увидеть, например, в Word при нажатии кнопки Office -> Options -> Resources -> About.
Нашел. Ничего не сказано, нет ни слова 32, ни слова 64.

Зато!!! Я наконец сделал то, что было спрошено здесь:

Shocker.ProЕсли это выполнить не в сервисе, а в обычном winforms приложении?
Так вот. Не в сервисе - оно работает! Хоть с Open, хоть с Add. И даже без всякого Run as Administrator.

А в сервисе не заработало даже тогда, когда системщик запустил сервис под админом сети.

То есть понятно одно - дело не в Ворде.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38550741
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну хорошо, ты с помощью Add получаешь ссылку на новоиспеченный объект. а она действительна? делать ты с ним что-то можешь? имя, например, прочитать...
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38550746
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычТо есть понятно одно - дело не в Ворде.
Точнее: не в правах на уровне Ворда. А в том, что Ворд не открывает файлы, будучи запущен из-под сервиса.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38550754
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proну хорошо, ты с помощью Add получаешь ссылку на новоиспеченный объект. а она действительна? делать ты с ним что-то можешь? имя, например, прочитать...
Сейчас проверю.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38550790
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал MsgBox(o.ActiveDocument.Words.Count). Работает. Похоже, что всё работает. Только не из-под сервиса.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38550797
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, где ты подцепил эту дрянь ? )))
Add возвращает ссылку на объект, с ней и работай.

Владимир СанычТолько не из-под сервиса.а из под сервиса?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38550808
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proой, где ты подцепил эту дрянь ? )))
Add возвращает ссылку на объект, с ней и работай.
ОК, буду иметь в виду на будущее. Но сейчас мне это никак не поможет.

Shocker.Proа из под сервиса?
См. сабж.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38550815
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычСм. сабж.Так а что происходит-то при попытке обратиться к свойству (только не через ActiveDocument)? Исключение? А какой текст ошибки?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38550864
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

Битность офиса можно проверить, если посмотреть как отображется процесс, например, для Word в Task Manager.

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

Если DCOM настроен правильно, а сомнения все еще есть, то причина в сервисе.

Проверил на одном из серверов:
- Сервис явно запущен от имени интерактивного пользователя, т.е. с указанием имени и пароля.
- Интерактивный пользователь явно указан в Component Services (My Computer и Microsoft Excel Application) со всеми необходимыми правами доступа.

Если же причина в сервисе, то можно попробовать написать как можно более подробный лог. В том или ином случае дожна проявится ошибка.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551006
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТак а что происходит-то при попытке обратиться к свойству (только не через ActiveDocument)? Исключение? А какой текст ошибки?
Могу попробовать. К какому свойству обращаться?

iMrTidyЕсли же причина в сервисе, то можно попробовать написать как можно более подробный лог.
Лог чего? У меня открыт отладчик, я могу делать пошаговую отладку и проверять что угодно. Только бы знать, что проверять.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551009
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычМогу попробовать. К какому свойству обращаться?Name
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551189
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

Windows Service не может быть стартовым проектом в режиме Debug. Как происходит тестирование/отладка? Word не работает в режиме Debug? Как ведет себя сервис, если его установить?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551202
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервис как раз установлен. Я в отладчике присоединяюсь к его процессу и попадаю в исходный код, который предусмотрительно скопирован на сервер. Ворд, полагаю, работает в обычном режиме, потому что он не откомпилирован с возможностью дебага, в отличие от моего сервиса.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551258
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычСервис как раз установлен. Я в отладчике присоединяюсь к его процессу и попадаю в исходный код, который предусмотрительно скопирован на сервер. Ворд, полагаю, работает в обычном режиме, потому что он не откомпилирован с возможностью дебага, в отличие от моего сервиса.

При таком способе debugging может повлиять на исполнение кода, по-крайней мере ряд вещей (GC, load/unload dll, DCOM) станут намного медленнее, все зависит конечно от самого кода, полагаю, что этот момент учтен. Можно попробовать поставить breakpoint на строку создания Word и параллельно отслеживать в Task Manager, создается ли процесс winword и как меняется объем занимамоей памяти. В Studio смотреть, что просиходит с переменными, особенно на строке с documents.add(...).

Вопрос о правах доступа интерактивного пользователя все еще открыт.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551273
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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Вопрос о правах доступа интерактивного пользователя все еще открыт.
Почему в обычной программе (не сервисе) всё работает?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551282
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Санычдальше программа летит на обращении к ActiveDocument, которого нет, и процесс Ворда остается незакрытый..... в цикле, то за минуту вся доступная память заполняется процессами ВордаСаныч, никак не пойму, у тебя нет там отлова исключения? Поймал исключение - закрой Ворд через Quit, освободи переменную и дальше разбирайся, зачем звонить системщику? И все же - что за исключение там возникает?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551287
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proу тебя нет там отлова исключения?
Есть отлов исключений, которые могут происходить при реальной работе программы. То, что летит в процессе кривой установки, ловится вручную.

Shocker.ProИ все же - что за исключение там возникает?
Где? При обращении к ActiveDocument не помню формулировку, но она и не важна, потому что глазами видно, что ActiveDocument отсутствует. А строчкой выше, на Add или Open, никакого исключения нет.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551294
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычПри обращении к ActiveDocument не помню формулировку, но она и не важнада причем тут ActiveDocument - не пользуйся ты этой дрянью

Код: vbnet
1.
2.
Set MyDoc = o.Documents.Add("c:\tmp\test.docx")
MyVar = MyDoc.Name

ты хочешь сказать, что первая строка выполняется без исключения, а переменная MyDoc=Nothing?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551301
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proда причем тут ActiveDocument - не пользуйся ты этой дрянью
Дык, какая разница? Если коллекция Documents пуста, то к ее элементу как ни обращайся, его там все равно нет.

Shocker.Pro
Код: vbnet
1.
2.
Set MyDoc = o.Documents.Add("c:\tmp\test.docx")
MyVar = MyDoc.Name

ты хочешь сказать, что первая строка выполняется без исключения, а переменная MyDoc=Nothing?
Именно такой вариант я смогу попробовать завтра. Но всё говорит о том, что именно так и будет.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551713
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работа в этом направлении временно приостановлена. Начальство решило попросить другой сервер. Лично мне кажется, что я через несколько дней приду к той же точке, но начальству виднее.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551719
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Жаль, что нам так и не удалось послушать начальника транспортного цеха" (с)
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38551806
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таки жаль. Так что спасибо всем за сочувствие и соучастие, но мне кажется, что скоро придется продолжить.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38557007
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, я вернулся. Новый сервер нам не дали. Сказали, что это виртуальная машина и от ее переустановки ничего не изменится. Так что я продолжаю.

iMrTidyПредлагаю попробовать добавить интерактивного пользователя со всеми возможными правами отдельно как в Microsoft Word Application, так и в My Computer, чтобы окончательно исключить подозрение на права доступа пользователя.
Прописал во всех возможных местах явным образом того юзера, под которым запускается сервис. Включая задание прав для этого конкретного юзера. Ничего не изменилось.

Shocker.ProТак а что происходит-то при попытке обратиться к свойству (только не через ActiveDocument)? Исключение? А какой текст ошибки?
Сделал так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
                            Dim x As Object
                            Try
                                x = o.Documents.Open(...)
                                x = o.Documents.Add(...)
                            Catch ex As Exception
                                Stop
                            End Try


Прохожу пошагово. Никакой ошибки не возникает ни на Open, ни на Add. Оба раза вижу, что x = Nothing.

Тупик, господа.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38557741
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

Та же самая программа и Word работают на других серверах?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38557764
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyТа же самая программа и Word работают на других серверах?
Так точно. Совершенно верно. Именно так.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38557785
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

Версия Windows и Office тоже такие же?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38557912
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не имею возможности проверить, но Офис оба раза 2007, а вот Windows тут 2008, а там, где работает, кажется, 2003.

Еще одна деталь. Программка, которая не сервис и работает, при запуске через Scheduler тоже не работает. Может быть, это какая-то новая политика в 2008...
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38557929
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычГоспода, я вернулся. Новый сервер нам не дали. Сказали, что это виртуальная машина и от ее переустановки ничего не изменится. Так что я продолжаю.

iMrTidyПредлагаю попробовать добавить интерактивного пользователя со всеми возможными правами отдельно как в Microsoft Word Application, так и в My Computer, чтобы окончательно исключить подозрение на права доступа пользователя.
Прописал во всех возможных местах явным образом того юзера, под которым запускается сервис. Включая задание прав для этого конкретного юзера. Ничего не изменилось.

Shocker.ProТак а что происходит-то при попытке обратиться к свойству (только не через ActiveDocument)? Исключение? А какой текст ошибки?
Сделал так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
                            Dim x As Object
                            Try
                                x = o.Documents.Open(...)
                                x = o.Documents.Add(...)
                            Catch ex As Exception
                                Stop
                            End Try


Прохожу пошагово. Никакой ошибки не возникает ни на Open, ни на Add. Оба раза вижу, что x = Nothing.

Тупик, господа.

Саныч, вот кусочек из одной программки "на ворде", за которой мне иногда приходится присматривать: (обрати внимание на текст, который я выписывал 25 мая 2012 года, вывесив язык набок от усердия).

Код: vbnet
1.
2.
3.
4.
5.
6.
 
    Set rDoc = Documents.Add(templateFN)
    '25.05.2012 файл существует в операционной системе, но word не захотел его открыть
    If rDoc Is Nothing Then
     MsgBox "Файл шаблона " & templateFN & " существует, но не был открыт Word. Проверьте настройки безопасноти. Добавьте местоположение файла в список безопасных.", vbCritical + vbOKOnly, True
    End If



Я скромно предполагаю, что это точно твой, что это твой случай.

PS
а я, между прочим, лестицу до сих пор перидически просматриваю.
Все жду советовательного ответа на свой вопрос.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38557930
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ух ты, последним постом форум сломал - нажал отправить, а в ответ топик засиял сонмом привидений, по штуке в каждом сообщении над ником автора сообщения.
сила ворда, етить...
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38557933
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот теперь я понял, в чем сила открытого кода - в безопасноти.
Эхь.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38558111
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyДобавьте местоположение файла в список безопасных.
Рад тебя видеть. И что я должен делать, получив сам от себя такое сообщение? Что это за список безопасных местоположений и как в него добавляют?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38558282
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа! Решение найдено. Я поднял на уши не только форум, но и фирму, в которой работаю, и мне здесь коллеги нашли правильную ссылку. Вот она (точнее, две):

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

Это невозможно вывести из общих знаний, сколь бы глобальными они ни были. Спасибо всем за потраченное на меня время.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38558301
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поздравляю - да уж!
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38558357
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Оно того стоит.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38563513
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хаха, господа. Еще один человек в нашей фирме столкнулся с той же проблемой. Его направили за решением прямо ко мне.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818302
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, проблема вернулась. Другой сервер. Сделал то, что написано в этом топике. Если раньше программа проходила строчку 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)
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818386
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyЕсли Microsoft Word Application отсутствует в списке, то можно добавить соответствующий ключ в реестер вручную или как рекомендуется здесь .
Трудно сказать, отсутствует или нет. В списке есть вот что:
Microsoft Office Word 97 - 2003 Document
При этом сам Ворд - 2007. Я попытался сделать то, что написано по ссылке. Открылся Ворд и сказал мне: This file could not be found.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818715
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
авторHRESULT: 0x800706BE

а что поменялось в системе - версия ос новая установлена, патч какой безопасный поставили, или что?

авторMicrosoft Office Word 97 - 2003 Document

ну, если физически регистрация ворда не "слетела", может быть, окажется достаточным на вкладке настроек dcom для авторMicrosoft Office Word 97 - 2003 Document
сказать:
а) что ему,[Microsoft Office Word 97 - 2003 Document], разрешено взаимодействие с рабочим столом (это третья вкладка настроек в "современной" панельке, по памяти).
б) дать явные права на запуск конкретно для того пользователя, от имени которого стартует "сервис" (вторая вкладка, по памяти...).

(Слово "сервис" взято в кавычки, т.к. с точки зрения использующего кода это может выглядеть как "обычная автоматизация". Но если "обычная автоматизация" запускается из-под сервиса, то сама работает в условиях "сервиса")
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818735
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч, посмотри
http://support.microsoft.com/kb/960007/en
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818801
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818884
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

А Word вручную в принципе открвыается?

Может быть это поможет?
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818917
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

авторРазные источники предлагают делать то так, то Interactive user.

не-не. "то так, то интеракив юзер" - это читать надо так:
В настройках систем разных версий птички, касательные запуска сеанса могут отличаться по своему составу.
Во всех случаях есть птички, описывающие, от имени какого пользователя запущен сервис.
В старых версиях - есть отдельная птичка "interactive user".
В "новых версиях" на отдельной вкладке описывается пользователь, от имени которого запускается сервис, а на другой вкладке дается отдельное специальное разрешение для приложения, запущенного сервисом от имени заказанного пользователя общаться с рабочим столом.

Пусть у тебя есть некий сервис S, использующий твою автоматизацию и запускаемый от имени пользователя U.
тогда для компонента [Microsoft Office Word 97 - 2003 Document],
а также компонента [Документ Microsoft Office Word 2007 с включенными макросами] (и т.п. найденными)
ты
б) даешь явные разрешения на запуск таких компонентов через dcom от имени пользователя U
и,
а) на закладках настроек доступа к рабочему столу, ставишь птичку,
разрешающую такому, запущенному через dcom от имени пользователя U компоненту, общение с рабочим столом.
Там не ineractive user, а какой-нибудь desktop communication (или а-ля) будет написан.
Кроме того,
в) в самом ворде местоположение шаблона предпочтительно явно пометить как безопасное.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818930
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyА Word вручную в принципе открвыается?
Конечно. Если бы не открывался, я бы не такие вопросы задавал.

iMrTidyМожет быть это поможет?
Попробую, доложу. Спасибо.

boobyВ настройках систем разных версий птички, касательные запуска сеанса могут отличаться по своему составу.
Да не. Я гуглю разные лекарства от моей проблемы. И где-то советуют зайти и переставить так, а где-то наоборот.

boobyв) в самом ворде местоположение шаблона предпочтительно явно пометить как безопасное.
А это я уже не первый раз вижу, но все равно не понимаю, как и где.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818946
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

авторА это я уже не первый раз вижу, но все равно не понимаю, как и где.
визуалка у 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.
...
  REM поднимаем Excel
  Set objExcel = CreateObject("Excel.Application")

  REM Поднимаем книгу с кодом VBA, который обучен выполнять специфичекую автоматизацию 
  REM т.е. - в cTplFile есть vba-код
  Set oAutomationXla = objExcel.workbooks.open(cTplFile)
  
 REM теперь в objExcel есть инициализированный VBA-проект

 ...
 REM а теперь пытаемся открыть шаблон, по которому будет вертаться новый документ такой,
 REM что в этом файле шаблона есть собственный vba-код
 REM (т.е. в cTemplateFile тоже есть vba-код)
 Set oTemplateBook = objExcel.Workbooks.Open(cTemplateFile, False, True) ' на этой строке (по моим наблюдениям) будет заявлен Fail, 

 REM если в настройках безопасности макросов не выставлена птица доверия к объектам vba-проектов

 REM а мы-то старались, чтобы в конце концов сказать:

  objExcel.Run  oAutomationXla.Name &  "!Автоматизируй_для", myCreativeParametr
 
...





И последнее - если автоматизация "правильно сделана" - настройки типа "уровень безопасности макросов" можно оставить в покое.
Все сработает как надо без их ворошения.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818949
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

ну фу же, какая бяка... бее..

авторКроме того, мои "наблюдашки" показывают, что эту птицу следует выставить не только когда ты явно генерируешь
код VBA в верстаемом документе, но и тогда, когда твоя автоматизация открывает шаблон/документ с уже зафиксированным в таком документе кодом vba.

Если ты, дорогуша, открываешь шаблон с кодом , то в созданный по шаблону документ,
vba-код переносится автоматически.
А это, креативный ты наш, и есть та самая "генерация vba-кода в новом документе на лету".
Наблюдашкин ты или нет, а без птички доверия к vba-проектам жить не сможешь.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38818950
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
Сорри.
я тут сам с собой про Excel поговорил.
О котором никто не спрашивал.
Мне бы надо чаще спать.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38820230
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, первый доклад о результатах. Нашел Trusted locations и добавил туда место, из которого я открываю файлы (а заодно и то, в которое сохраняю).

Хорошая новость. Ошибки исчезли! Код проходится без ошибок.

Плохая новость. Файл, который создается моим кодом, не открывается в Ворде. Хотя я отлаживаю на примере, в котором файл должен просто открываться и сразу сохраняться командой Save As. И размер этого файла вышел примерно вдвое больше, чем у исходного. Не знаю, продолжение ли это тех же проблем или я чего-то напутал в своих настройках.

На всякий случай прилагаю и исходный файл, и созданный программой.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38820282
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,

А что нужно увидеть в этих файлах?
Дома у меня только 2003й ворд с приделанной читалкой docx-файлов.
Мой 2003й одинаково успешно открывает оба файла, и показывает их без видимых визуальных различий.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38820304
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повторно: пока вижу следующее:
а) оба файла одинаково успешно открываются моим 2003м вордом.
б) структурно файлы разные - test.docx - это честный docx, с текстом документа в виде xml
а -1411291139551-01.docx вместо xml-содержимого документа, содержит в себе двоичный поток WordDocument.
Попробуй перименовать этот файл в -1411291139551-01.docb
Это может помочь "открыть" его.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38820307
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, спасибо. Если его переименовать в doc (что такое docb, я не знаю), то он открывается. То есть у меня строится файл doc, но с расширением docx. Буду рыть в сторону тупых ошибок в настройках моей системы. Ишо раз спасибо.
...
Рейтинг: 0 / 0
Documents.Count = 0
    #38820505
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел последнюю тупую ошибку, но не в настройках, а в программе. Когда я сохраняю файл, то я всегда это делал так:
...ActiveDocument.SaveAs(..., Word.WdSaveFormat.wdFormatDocument)
И это работало! Даже на том сервере, в связи с которым я задавал вопросы в этом топике в феврале, это до сих пор работает и создает файлы в формате docx. Однако я сейчас нагуглил, что wdFormatDocument - это формат doc, а для docx надо писать wdFormatDocument Default ! Написал wdFormatDocumentDefault, откомпилировал - и всё заработало как надо. Чем тот сервер отличается от этого, я не знаю.
...
Рейтинг: 0 / 0
78 сообщений из 78, показаны все 4 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Documents.Count = 0
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]