l'automatisation de Word ne fonctionne que pour l'administrateur, ou avec un retard après la création Word.Application

StackOverflow https://stackoverflow.com/questions/4022719

Question

Nous avons un programme fait dans Borland Delphi qui utilise l'automatisation de Word pour créer des documents. Sur une installation (serveur terminal) nous ne pouvons obtenir l'automatisation de Word au travail lors de l'exécution en tant qu'administrateur local.
Lorsque runnnig comme anoter utilisateur, nous obtenons un message d'erreur « Opdracht mislukt -2146824090 » (sa version néerlandaise d'Office), wich je suppose est traduit « l'opération a échoué » ou « Échec de la commande ».

L'utilisateur a un accès en lecture / écriture dans le dossier où l'essai de programme pour mettre le nouveau document.

Office 2010
64bits de Windows Server 2008 R2 standard

Le applicaion est une application Windows 32 bits.

Si j'ajoute un délai (500ms) après la Word.Application est créée, tout fonctionne comme normall.

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

Tout le monde sait pourquoi la commande CreateOleObject retourne maintenant avant l'application Word peut être utilisé?

Était-ce utile?

La solution 3

Le compte administrateur travail wihtout retard, ne semble pas avoir quoi que ce soit avec des droits à faire, mais que Word est capable de commencer beaucoup plus rapidement avec ce compte que les comptes normaux utilisateur de domaine.

Je peux vivre avec la solution de contournement de retard, mais si quelqu'un connaît un moyen mieux s'il vous plaît laissez-moi savoir.

Autres conseils

Si vous voulez suivre que, vous pouvez utiliser un outil comme ProcessMonitor pour retracer l'automatisation de Word exécutions jusqu'à point que vous pouvez utiliser l'application.

Semble une sorte de droits chèque est en cours -. Mais une demi-seconde semble trop de temps juste pour ce

Vous pouvez essayer d'ouvrir le document plusieurs fois, ou est la Parole totalement foireuse après a donné l'erreur?

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;

Modifier

ma réponse qui fournit une meilleure solution et une explication pourquoi cela se produit.

Je sais que ce fil est assez vieux, mais je résolu ce problème en prenant soin de fermer le document avant de quitter (oleDocument.Close). Ce faisant il n'y a pas besoin de tout type de retards, etc. Voir extrait de code Delphi ci-dessous.

Exemple:

  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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top