Автоматизация Word работает только для администратора или с задержкой после создания word.application - PullRequest
5 голосов
/ 26 октября 2010

У нас есть программа, созданная в Borland Delphi, которая использует автоматизацию Word для создания документов. На установке (терминальный сервер) мы можем настроить автоматизацию Word только при работе в качестве локального администратора.
Когда пользователь запускается как пользователь anoter, мы получаем сообщение об ошибке «Opdracht mislukt -2146824090» (его голландская версия Office), которое, как мне кажется, переводится как «Операция не выполнена» или «Команда не выполнена».

Пользователь имеет доступ на чтение / запись к папке, в которую программа пытается поместить новый документ.

Офис 2010
64-битный Windows Server 2008 R2 стандарт

Приложение является 32-битным приложением Windows.

Если я добавлю задержку (500 мс) после создания приложения word.application, все будет работать как нормальный.

WordApp   := CreateOleObject('Word.Application');
sleep(500);
Doc := WordApp.documents.Open(sFile,EmptyParam,true);

Кто-нибудь знает, почему команда CreateOleObject теперь возвращается, прежде чем приложение Word можно будет использовать?

Ответы [ 4 ]

1 голос
/ 04 января 2011

Вы могли бы попытаться открыть документ несколько раз, или Word полностью закрылся после того, как он выдал ошибку?

WordApp := CreateOleObject('Word.Application');

while True do
begin
  try
    Doc := WordApp.documents.Open(sFile,EmptyParam,true);
    Break;
  except
    on E: EOleSysError do
    begin
      // raise error if it's not the expected "Command failed" error
      if E.ErrorCode <> -2146824090 then
        raise;
    end;
  end;
end;

Edit:

Пожалуйста, смотрите мой ответ здесь , который предоставляет лучшее решение и объяснение, почему это происходит.

1 голос
/ 26 октября 2010

Если вы хотите отследить это, вы можете использовать такой инструмент, как ProcessMonitor , чтобы отслеживать выполнение автоматизации Word до того момента, когда вы сможете использовать приложение.

Кажется, что-то вродепроверка прав идет, но пол секунды кажется слишком много для этого.

0 голосов
/ 05 апреля 2016

Я понимаю, что эта ветка довольно старая, но я решил эту проблему, закрыв документ перед выходом (oleDocument.Close).При этом не требуется никаких задержек и т. Д. См. Фрагмент кода Delphi ниже.

Пример:

  oleWord     := Unassigned;
  oleDocument := Unassigned;

  Screen.Cursor := crHourGlass;

  try
    oleWord               := CreateOleObject('Word.Application');
    oleWord.Visible       := False;
    oleWord.DisplayAlerts := False;

    oleDocument := oleWord.Documents.Open(Worklist.Filename);
    oleDocument.SaveAs(Worklist.Filename, wdFormatDOSTextLineBreaks);

    oleDocument.Close;
    oleWord.Quit(False);
  finally
    oleDocument := Unassigned;
    oleWord     := Unassigned;

    Screen.Cursor := crDefault;
  end;
0 голосов
/ 28 октября 2010

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

Я могу жить с обходным решением задержки, но если кто-нибудь знает лучший способ, пожалуйста, дайте мне знать.

...