|
|
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Создаю экземляр сервера Word Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. После выполнения CreateWordServer система создает процесс WINWORD.EXE. Существует ли более быстрый способ получить его Process ID? Пока в голову приходит только "получить список процессов" - "запустить Word" - "получить новый список процессов" - "сравнить списки". When a movie is over, it's a black ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 16:23 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
IRunningObjectTable ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 16:25 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
в голову приходит: Window.Hwnd - по HWND явно можно получить PID макросом: сделать макрос в Word'е, в нем вызывать что нибудь типа GetCurrentProcess. Но макросы это криво по определению возможно можно через IRunningObjectTable, но я с ним никогда не работал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 16:41 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevв голову приходит: Window.Hwnd - по HWND явно можно получить PID О каком Window идет речь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 16:42 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
КвейдLeonid Kudryavtsevв голову приходит: Window.Hwnd - по HWND явно можно получить PID О каком Window идет речь? любом внутри Word'а будет ли создаваться какое нибудь Application.ActiveWindow если Application.Visible=false я не знаю, нужно проверять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 16:44 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
_Application.Hinstance вернёт что нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 16:50 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Michael Longneck_Application.Hinstance вернёт что нужноА это разве не Excel only фича? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 16:52 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Я думаю у всех офисных приложений есть. А так, out-of-process серверы COM ничего тебе не скажут, такого API не просматривается общего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 16:54 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevКвейдпропущено... О каком Window идет речь? любом внутри Word'а будет ли создаваться какое нибудь Application.ActiveWindow если Application.Visible=false я не знаю, нужно проверятьА если на машине запущено два экземпляра Word, один "мой", а другой пользовательский? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 16:54 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
запущены и запущены, в чем проблема? окна то у них разные будут сам так не делал, потребности не было тут скорее проблема, что OLE вроде не гарантирует. что в этом случае будет два экземпляра и два разных процесса. Т.ч. чисто формально, вполне может оказаться на 100500 документов один экемпляр процесса ))) который поделить на "мой" и "другой" физически не возможно IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 17:04 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Квейд, а цель всего этого какова? зачем? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 17:39 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
МимопроходящийКвейд, а цель всего этого какова? зачем? Приложение работает как служба. Задача очень простая, загрузить документ Word и сохранить его как текстовый файл. Код тоже очень простой, как дверь. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. Казалось бы, что тут крамольного? А прикол в том, что на НЕКОТОРЫХ (не на всех) машинах на НЕКОТОРЫХ (не на всех) документах, содержащих таблицы, выделенный код в режиме службы на выделенной строке: 1) Падает с Invalid variant operation, но это еще пол-беды 2) Этот же код в режиме приложения под отладчиком на всех машинах работает нормально 3) После падения с Invalid variant operation происходит самое плохое: память, занятая процессом WINWORD.EXE начинает бесконтрольно утекать со скоростью 20-50 метров в секунду, после того как WINWORD.EXE разрастается в памяти до 16 (!) гигов, другие приложения получают отлуп Оut of memory и через какое-то время зависает компьютер, после чего Винда самостоятельно уходит на перезагрузку. Я этого допустить не могу, так как служба крутиться в продакшене на той же виртуалке, что и сервер БД. Пока я смотрю в сторону костыля - программно "тушить" процесс WINWORD.EXE в случае, если что-то пошло не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 11:05 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Буду рад выслушать советы, ибо это жесть какая-то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 11:10 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
я бы забил болт на Word вообще. есть куча дельфийских библиотек, которые умеют самостоятельно парсить документы MS Officce. не прибегая к COM/OLE. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 11:16 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийя бы забил болт на Word вообще. есть куча дельфийских библиотек, которые умеют самостоятельно парсить документы MS Officce. не прибегая к COM/OLE. А есть гарантия, что что "куча дельфийских библиотек" поддерживают все стандарты Word в полном объеме, и не подложат мне свинью на каком-нибудь одном документе из тысячи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 11:22 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
18.04.2019 11:22, Квейд пишет: > А есть гарантия, что что "куча дельфийских библиотек" поддерживают все стандарты Word в полном объеме, и не подложат мне свинью на каком-нибудь одном документе из тысячи? полную гарантию даёт только страховой полис. (С) то что делаешь сейчас - попытка подстелить соломки под пороховую бочку. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 11:25 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, если нетрудно, дай пару примеров библиотек, я посмотрю в эту сторону, конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 11:25 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
18.04.2019 11:25, Квейд пишет: > если нетрудно, дай пару примеров библиотек, я посмотрю в эту сторону, конечно я лично юзаю Axolot Data. правда в основном для XLS и XLSX. но и для DOCX у них тоже есть. http://www.axolot.com/products.htm пробовал EMS Quick Import, но чо-то не зашло. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 11:38 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Квейд2) Этот же код в режиме приложения под отладчиком на всех машинах работает нормальноА под отладчиком в режиме службы? Дальше, для отладки я бы этот код переписал так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. и посмотрел бы где будет падать. и еще, ты уверен, что в выделенном должно быть 1, а не 0? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 15:48 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Квейд2) Этот же код в режиме приложения под отладчиком на всех машинах работает нормальноА под отладчиком в режиме службы? А как отлаживать запущенную службу? В окне Attach to process моей службы нету в списке. Галочки щелкал. _Vasilisk_Дальше, для отладки я бы этот код переписал так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. и посмотрел бы где будет падать. Попробую _Vasilisk_и еще, ты уверен, что в выделенном должно быть 1, а не 0? В талмуде с единички начинают https://docs.microsoft.com/ru-ru/office/vba/api/word.table ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 15:52 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Если закомментировать Код: pascal 1. 2. то служба падает дальше на Код: pascal 1. 2. 3. 4. т.е. проблема не в ConvertToText, а в самом обращении к серверу Word ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 15:55 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Квейдт.е. проблема не в ConvertToText, а в самом обращении к серверу Wordт.е. к WordDocument ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 15:56 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
А нельзя интерфейсы прямо получить, а не через OleVariant обрабатывать? _WordApplication и.т.д.? Может так понятнее будет где ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 16:44 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Michael Longneck, попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 17:15 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Как идеи: 1) Гугля уверяет. что ошибка случается, когда в Variant содержится null. Вы не пытались, после Open проверять, действительно ли документ открыт и WordDocument корректен. Насколько я вижу по Вашим словам "Если закомментировать...то служба падает дальше на ... т.е. проблема не в ConvertToText, а в самом обращении к серверу Word" обращении к WordDocument 2) Некоторые операции Word умеет выполнять ассинхронно (например пагинацию). Вполне возможно, что ConvertToText из их числа. Я бы while заменил на for в обратном порядке (т.е. сначала обрабатывать последнию таблицу в документе по индексу и двигаться к первой). Т.е. идея аналогичная предложению 21866312 только дополнительно изменить порядок обработки таблиц на обратный. P.S. Беглый поиск по Inet уверяет. Documents.Open вполне может возврашать null в некоторых случаях (ошибки с правами). Возможно и при других ошибках при открытии документов вполне можно null словить. https://social.msdn.microsoft.com/Forums/en-US/0f5448a7-72ed-4f16-8b87-922b71892e07/word-2007-documentsopen-returns-null-in-aspnet ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2019, 18:45 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevКак идеи: 1) Гугля уверяет. что ошибка случается, когда в Variant содержится null. Вы не пытались, после Open проверять, действительно ли документ открыт и WordDocument корректен. Насколько я вижу по Вашим словам "Если закомментировать...то служба падает дальше на ... т.е. проблема не в ConvertToText, а в самом обращении к серверу Word" обращении к WordDocument 2) Некоторые операции Word умеет выполнять ассинхронно (например пагинацию). Вполне возможно, что ConvertToText из их числа. Я бы while заменил на for в обратном порядке (т.е. сначала обрабатывать последнию таблицу в документе по индексу и двигаться к первой). Т.е. идея аналогичная предложению 21866312 только дополнительно изменить порядок обработки таблиц на обратный. P.S. Беглый поиск по Inet уверяет. Documents.Open вполне может возврашать null в некоторых случаях (ошибки с правами). Возможно и при других ошибках при открытии документов вполне можно null словить. https://social.msdn.microsoft.com/Forums/en-US/0f5448a7-72ed-4f16-8b87-922b71892e07/word-2007-documentsopen-returns-null-in-aspnet В общем, синопис такой Код: pascal 1. 2. 3. 4. 5. 6. 7. Сразу после этого кода VarIsEmpty(WordDocument) = True, а процесс WINWORD.EXE ведет себя как я уже показывал ранее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 10:35 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Квейд, А накатить обновления на офис не поможет?.. Или и так всё стоит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:06 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
alekcvpКвейд, А накатить обновления на офис не поможет?.. Или и так всё стоит? На моей машине (на которой код падает) - Office 2013 На машине коллеги (где код не падает) - Office 2016 Проблема в том, что заказчиков много и у каждого зоопарк офисов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:14 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
КвейдalekcvpКвейд, А накатить обновления на офис не поможет?.. Или и так всё стоит? На моей машине (на которой код падает) - Office 2013 На машине коллеги (где код не падает) - Office 2016 Проблема в том, что заказчиков много и у каждого зоопарк офисов Тем более очень похоже на баг офиса. А если по условию "VarIsEmpty(WordDocument) = True" попытаться закрыть Word через OLE?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:17 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Как вариант: если это действительно баг и если для 2013 офиса есть патч этого бага, то можно найти это обновление отдельно и ставить его вместе с приложением принудительно, если у клиента стоит 2013 офис. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:18 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
alekcvpКвейдпропущено... На моей машине (на которой код падает) - Office 2013 На машине коллеги (где код не падает) - Office 2016 Проблема в том, что заказчиков много и у каждого зоопарк офисов Тем более очень похоже на баг офиса. А если по условию "VarIsEmpty(WordDocument) = True" попытаться закрыть Word через OLE?... Код: pascal 1. отрабатывает, я проверил. Но процесс WINWORD.EXE продолжает жрать память до отказа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:18 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
и самое плохое, что эта замануха происходит только в режиме службы этот же код на моей машине в режиме приложения отрабатывает нормально у коллеги с другой версией офиса в режиме службы работает ОК ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:20 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Квейд, А служба от чьего имени запускается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:21 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Где-то ещё читал, что чтобы заверщить процесс необходимо кроме вызова .Quit ещё обнулить все ссылки на сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:21 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
alekcvpКвейд, А служба от чьего имени запускается?Local system account Но разве это имеет значение? У меня код падает на определенном наборе файлов, на другом наборе все отлично в службе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:25 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
alekcvpГде-то ещё читал, что чтобы заверщить процесс необходимо кроме вызова .Quit ещё обнулить все ссылки на сервер. у меня так Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:25 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
КвейдalekcvpКвейд, А служба от чьего имени запускается?Local system account Но разве это имеет значение? У меня код падает на определенном наборе файлов, на другом наборе все отлично в службе. Ну, выше уже было предположение про права доступа, хотя у system полный доступ ко всему, так что мимо (если файлы не в сети лежат). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:39 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
19.04.2019 11:25, Квейд пишет: > у меня так > if not VarIsEmpty(WordServer)then проверять надо на not VarIsClear(WordServer) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 11:55 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Квейд? В окне Attach to process моей службы нету в спискеIDE запустить от админа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 14:01 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Michael LongneckА нельзя интерфейсы прямо получить, а не через OleVariant обрабатывать? _WordApplication и.т.д.?Там же совместимости нет. Они свои для каждой версии офиса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 14:02 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Квейди самое плохое, что эта замануха происходит только в режиме службы этот же код на моей машине в режиме приложения отрабатывает нормальноА попробуй у себя службу запустить от имени локального пользователя. Может разные Ворды стартуют? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 14:06 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Кажется, вот твое счастье https://stackoverflow.com/questions/10837437/interop-word-documents-open-is-null http://davidsdotnetlines.blogspot.com/2015/12/wordapplicationdocumentsopen-returns.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 14:11 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Кажется, вот твое счастье https://stackoverflow.com/questions/10837437/interop-word-documents-open-is-null http://davidsdotnetlines.blogspot.com/2015/12/wordapplicationdocumentsopen-returns.html У меня в DCOM config отсутствует эквивалент параметра "Microsoft Word 97 - 2003 Document", но я сейчас еще поэксперементирую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 16:29 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Квейд_Vasilisk_Кажется, вот твое счастье https://stackoverflow.com/questions/10837437/interop-word-documents-open-is-null http://davidsdotnetlines.blogspot.com/2015/12/wordapplicationdocumentsopen-returns.html У меня в DCOM config отсутствует эквивалент параметра "Microsoft Word 97 - 2003 Document", но я сейчас еще поэксперементирую Помогло! Пошел с твоей ссылки дальше по ссылке https://stackoverflow.com/questions/1006923/automating-office-via-windows-service-on-server-2008 всего-то нужно, чтобы на машине существовали папки C:\Windows\System32\config\systemprofile\Desktop C:\Windows\SysWOW64\config\systemprofile\Desktop интересно, с чем это связано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 16:54 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Не решение напрямую, но как обходной вариант - т.к. цель всего лишь сохранить как текст, и если формат docx, то можно заюзать wordpad. Как еще один обходной вариант - получать PID по hwnd и перед убитием проверять, от кого запущен и нет ли в нем лишних открытых документов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 17:00 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
КвейдПошел с твоей ссылки дальше по ссылкеНужно читать не только первый ответ с максимум голосов https://stackoverflow.com/a/24671664/5376639 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 18:12 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
КвейдC:\Windows\System32\config\systemprofile\Desktop C:\Windows\SysWOW64\config\systemprofile\Desktop интересно, с чем это связано? Подозреваю что с "гениальностью" программистов офиса, которые по-умолчанию считают что офис запускает интерактивный пользователь и сохраняют туда какие-нибудь временные файлы (а-ля ~document1.docx). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 19:05 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
КвейдНо процесс WINWORD.EXE продолжает жрать память до отказа Почему Эксель завершается только после CoUninitialize? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2019, 19:55 |
|
||
|
Word, CreateOleObject и PID
|
|||
|---|---|---|---|
|
#18+
Квейд, Не надо никакого хендла Простой макрос и вуаля Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2019, 00:54 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2039556]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
174ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 525ms |

| 0 / 0 |
