powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Word, CreateOleObject и PID
50 сообщений из 50, показаны все 2 страниц
Word, CreateOleObject и PID
    #39802924
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаю экземляр сервера Word

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  function CreateWordServer: OleVariant;
  begin
    Result := CreateOleObject('Word.Application')
    Result.Options.CheckGrammarAsYouType := False;
    Result.Options.CheckSpellingAsYouType := False;
    Result.Visible := False;
    Result.DisplayAlerts := wdAlertsNone
  end;



После выполнения CreateWordServer система создает процесс WINWORD.EXE.
Существует ли более быстрый способ получить его Process ID?
Пока в голову приходит только "получить список процессов" - "запустить Word" - "получить новый список процессов" - "сравнить списки".


When a movie is over, it's a black
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802926
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IRunningObjectTable ?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802941
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в голову приходит:
Window.Hwnd - по HWND явно можно получить PID

макросом:
сделать макрос в Word'е, в нем вызывать что нибудь типа GetCurrentProcess. Но макросы это криво по определению

возможно можно через IRunningObjectTable, но я с ним никогда не работал.
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802943
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevв голову приходит:
Window.Hwnd - по HWND явно можно получить PID
О каком Window идет речь?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802944
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдLeonid Kudryavtsevв голову приходит:
Window.Hwnd - по HWND явно можно получить PID
О каком Window идет речь?
любом внутри Word'а

будет ли создаваться какое нибудь Application.ActiveWindow если Application.Visible=false я не знаю, нужно проверять
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802945
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802951
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Application.Hinstance вернёт что нужно
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802954
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck_Application.Hinstance вернёт что нужноА это разве не Excel only фича?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802958
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю у всех офисных приложений есть. А так, out-of-process серверы COM ничего тебе не скажут, такого API не просматривается общего.
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802960
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevКвейдпропущено...
О каком Window идет речь?
любом внутри Word'а

будет ли создаваться какое нибудь Application.ActiveWindow если Application.Visible=false я не знаю, нужно проверятьА если на машине запущено два экземпляра Word, один "мой", а другой пользовательский?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802967
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запущены и запущены, в чем проблема?
окна то у них разные будут

сам так не делал, потребности не было

тут скорее проблема, что OLE вроде не гарантирует. что в этом случае будет два экземпляра и два разных процесса. Т.ч. чисто формально, вполне может оказаться на 100500 документов один экемпляр процесса ))) который поделить на "мой" и "другой" физически не возможно

IMHO & AFAIK
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39802994
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд, а цель всего этого какова?
зачем?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803206
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийКвейд, а цель всего этого какова?
зачем?
Приложение работает как служба. Задача очень простая, загрузить документ 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.
/////////////////////////////////

var
  WordServer: OleVariant;
  WordDocument: OleVariant;

/////////////////////////////////

  function SaveAsTextFile(const AFileDoc: string; var AFileText: string): Boolean;
  begin
    AFileText := ChangeFileExt(AFileDoc, '.TXT');
    Result := True;
    if not VarIsEmpty(WordServer) then
      try
        WordDocument := WordServer.Documents.Open(AFileDoc, False, True, False);
        try
          while WordDocument.Tables.Count > 0 do
            WordDocument.Tables.Item(1).ConvertToText;
          WordDocument.SaveAs2(FileName := AFileText, FileFormat := wdFormatText, LockComments := False,
            AddToRecentFiles := False, ReadOnlyRecommended := False, EmbedTrueTypeFonts := False,
            SaveNativePictureFormat := False, SaveFormsData := False, SaveAsAOCELetter := False, Encoding := 1251,
            InsertLineBreaks := False, AllowSubstitutions := False, LineEnding := wdCROnly, CompatibilityMode := 0);
        finally
          WordDocument.Close(False, False, False)
        end
      except
        Result := False
      end
  end;



Казалось бы, что тут крамольного? А прикол в том, что на НЕКОТОРЫХ (не на всех) машинах на НЕКОТОРЫХ (не на всех) документах, содержащих таблицы, выделенный код в режиме службы на выделенной строке:

1) Падает с Invalid variant operation, но это еще пол-беды
2) Этот же код в режиме приложения под отладчиком на всех машинах работает нормально
3) После падения с Invalid variant operation происходит самое плохое: память, занятая процессом WINWORD.EXE начинает бесконтрольно утекать со скоростью 20-50 метров в секунду, после того как WINWORD.EXE разрастается в памяти до 16 (!) гигов, другие приложения получают отлуп Оut of memory и через какое-то время зависает компьютер, после чего Винда самостоятельно уходит на перезагрузку. Я этого допустить не могу, так как служба крутиться в продакшене на той же виртуалке, что и сервер БД.



Пока я смотрю в сторону костыля - программно "тушить" процесс WINWORD.EXE в случае, если что-то пошло не так.
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803211
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Буду рад выслушать советы, ибо это жесть какая-то
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803219
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы забил болт на Word вообще.
есть куча дельфийских библиотек,
которые умеют самостоятельно парсить документы MS Officce.
не прибегая к COM/OLE.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803227
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийя бы забил болт на Word вообще.
есть куча дельфийских библиотек,
которые умеют самостоятельно парсить документы MS Officce.
не прибегая к COM/OLE.


А есть гарантия, что что "куча дельфийских библиотек" поддерживают все стандарты Word в полном объеме, и не подложат мне свинью на каком-нибудь одном документе из тысячи?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803229
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18.04.2019 11:22, Квейд пишет:
> А есть гарантия, что что "куча дельфийских библиотек" поддерживают все стандарты Word в полном объеме, и не подложат мне свинью на каком-нибудь одном документе из тысячи?

полную гарантию даёт только страховой полис. (С)

то что делаешь сейчас - попытка подстелить соломки под пороховую бочку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803230
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

если нетрудно, дай пару примеров библиотек, я посмотрю в эту сторону, конечно
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803237
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803453
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд2) Этот же код в режиме приложения под отладчиком на всех машинах работает нормальноА под отладчиком в режиме службы?

Дальше, для отладки я бы этот код переписал так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var
  Tables: OleVariant;
  Count: Integer;
begin
  ...........
  Tables = WordDocument.Tables;
  Count = Tables.Count;
  while Count > 0 do begin
    Tables.Item(1).ConvertToText;
    Count = Tables.Count;  // Еще лучше Dec(Count)
  end;
end;

и посмотрел бы где будет падать.

и еще, ты уверен, что в выделенном должно быть 1, а не 0?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803459
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Квейд2) Этот же код в режиме приложения под отладчиком на всех машинах работает нормальноА под отладчиком в режиме службы?

А как отлаживать запущенную службу? В окне Attach to process моей службы нету в списке. Галочки щелкал.

_Vasilisk_Дальше, для отладки я бы этот код переписал так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var
  Tables: OleVariant;
  Count: Integer;
begin
  ...........
  Tables = WordDocument.Tables;
  Count = Tables.Count;
  while Count > 0 do begin
    Tables.Item(1).ConvertToText;
    Count = Tables.Count;  // Еще лучше Dec(Count)
  end;
end;

и посмотрел бы где будет падать. Попробую


_Vasilisk_и еще, ты уверен, что в выделенном должно быть 1, а не 0?

В талмуде с единички начинают https://docs.microsoft.com/ru-ru/office/vba/api/word.table
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803466
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если закомментировать

Код: pascal
1.
2.
          while WordDocument.Tables.Count > 0 do
            WordDocument.Tables.Item(1).ConvertToText;



то служба падает дальше на

Код: pascal
1.
2.
3.
4.
          WordDocument.SaveAs2(FileName := AFileText, FileFormat := wdFormatText, LockComments := False,
            AddToRecentFiles := False, ReadOnlyRecommended := False, EmbedTrueTypeFonts := False,
            SaveNativePictureFormat := False, SaveFormsData := False, SaveAsAOCELetter := False, Encoding := 1251,
            InsertLineBreaks := False, AllowSubstitutions := False, LineEnding := wdCROnly, CompatibilityMode := 0);



т.е. проблема не в ConvertToText, а в самом обращении к серверу Word
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803468
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейдт.е. проблема не в ConvertToText, а в самом обращении к серверу Wordт.е. к WordDocument
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803504
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нельзя интерфейсы прямо получить, а не через OleVariant обрабатывать? _WordApplication и.т.д.? Может так понятнее будет где ошибка?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803519
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck,

попробую
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803573
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
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803788
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
        WordDocument := WordServer.Documents.Open(FileName := AFileDoc,
          ConfirmConversions := False,
          ReadOnly := True,
          AddToRecentFiles := False,
          Visible := False,
          OpenAndRepair := False,
          NoEncodingDialog := True);



Сразу после этого кода VarIsEmpty(WordDocument) = True, а процесс WINWORD.EXE ведет себя как я уже показывал ранее

...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803815
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд,

А накатить обновления на офис не поможет?.. Или и так всё стоит?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803823
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpКвейд,

А накатить обновления на офис не поможет?.. Или и так всё стоит?

На моей машине (на которой код падает) - Office 2013
На машине коллеги (где код не падает) - Office 2016

Проблема в том, что заказчиков много и у каждого зоопарк офисов
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803825
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдalekcvpКвейд,

А накатить обновления на офис не поможет?.. Или и так всё стоит?

На моей машине (на которой код падает) - Office 2013
На машине коллеги (где код не падает) - Office 2016

Проблема в том, что заказчиков много и у каждого зоопарк офисов

Тем более очень похоже на баг офиса.
А если по условию "VarIsEmpty(WordDocument) = True" попытаться закрыть Word через OLE?...
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803827
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант: если это действительно баг и если для 2013 офиса есть патч этого бага, то можно найти это обновление отдельно и ставить его вместе с приложением принудительно, если у клиента стоит 2013 офис.
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803828
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpКвейдпропущено...


На моей машине (на которой код падает) - Office 2013
На машине коллеги (где код не падает) - Office 2016

Проблема в том, что заказчиков много и у каждого зоопарк офисов

Тем более очень похоже на баг офиса.
А если по условию "VarIsEmpty(WordDocument) = True" попытаться закрыть Word через OLE?...


Код: pascal
1.
  WordServer.Quit;



отрабатывает, я проверил.

Но процесс WINWORD.EXE продолжает жрать память до отказа
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803829
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и самое плохое, что эта замануха происходит только в режиме службы
этот же код на моей машине в режиме приложения отрабатывает нормально


у коллеги с другой версией офиса в режиме службы работает ОК
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803830
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд,

А служба от чьего имени запускается?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803832
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то ещё читал, что чтобы заверщить процесс необходимо кроме вызова .Quit ещё обнулить все ссылки на сервер.
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803837
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpКвейд,

А служба от чьего имени запускается?Local system account

Но разве это имеет значение? У меня код падает на определенном наборе файлов, на другом наборе все отлично в службе.
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803839
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpГде-то ещё читал, что чтобы заверщить процесс необходимо кроме вызова .Quit ещё обнулить все ссылки на сервер.

у меня так

Код: pascal
1.
2.
3.
4.
5.
      if not VarIsEmpty(WordServer) then
      begin
        WordServer.Quit;
        WordServer := Unassigned
      end;
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803854
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдalekcvpКвейд,

А служба от чьего имени запускается?Local system account
Но разве это имеет значение? У меня код падает на определенном наборе файлов, на другом наборе все отлично в службе.

Ну, выше уже было предположение про права доступа, хотя у system полный доступ ко всему, так что мимо (если файлы не в сети лежат).
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803862
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
19.04.2019 11:25, Квейд пишет:
> у меня так
> if not VarIsEmpty(WordServer)then

проверять надо на not VarIsClear(WordServer)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803946
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд? В окне Attach to process моей службы нету в спискеIDE запустить от админа
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803947
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael LongneckА нельзя интерфейсы прямо получить, а не через OleVariant обрабатывать? _WordApplication и.т.д.?Там же совместимости нет. Они свои для каждой версии офиса
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803949
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейди самое плохое, что эта замануха происходит только в режиме службы
этот же код на моей машине в режиме приложения отрабатывает нормальноА попробуй у себя службу запустить от имени локального пользователя. Может разные Ворды стартуют?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39803951
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39804048
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_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", но я сейчас еще поэксперементирую
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39804064
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд_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

интересно, с чем это связано?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39804068
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не решение напрямую, но как обходной вариант - т.к. цель всего лишь сохранить как текст, и если формат docx, то можно заюзать wordpad.

Как еще один обходной вариант - получать PID по hwnd и перед убитием проверять, от кого запущен и нет ли в нем лишних открытых документов
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39804080
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдПошел с твоей ссылки дальше по ссылкеНужно читать не только первый ответ с максимум голосов
https://stackoverflow.com/a/24671664/5376639
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39804093
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдC:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWOW64\config\systemprofile\Desktop

интересно, с чем это связано?

Подозреваю что с "гениальностью" программистов офиса, которые по-умолчанию считают что офис запускает интерактивный пользователь и сохраняют туда какие-нибудь временные файлы (а-ля ~document1.docx).
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39804102
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдНо процесс WINWORD.EXE продолжает жрать память до отказа
Почему Эксель завершается только после CoUninitialize?
...
Рейтинг: 0 / 0
Word, CreateOleObject и PID
    #39804167
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд,

Не надо никакого хендла

Простой макрос и вуаля
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Declare PtrSafe Function GetCurrentProcessId Lib "kernel32" () As Integer
Sub GetCurrentPID()

  i = GetCurrentProcessId()
  MsgBox "GetCurrentProcessId: " + CStr(i)
  Debug.Print i
    
End Sub
...
Рейтинг: 0 / 0
50 сообщений из 50, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Word, CreateOleObject и PID
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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