L'automazione delle parole funziona solo per l'amministratore o con un ritardo dopo la creazione di word.applicazione

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

Domanda

Abbiamo un programma realizzato a Borland Delphi che utilizza l'automazione delle parole per creare documenti. In un'installazione (terminale server) siamo in grado di far funzionare solo l'automazione delle parole durante l'esecuzione come amministratore locale.
Quando Runnnig come utente di anoter riceviamo un messaggio di errore "Opdracht Mislukt -2146824090" (la sua versione olandese di Office), che immagino sia tradotto in "Operation non riuscita" o "Comando non riuscito".

L'utente ha accesso/scrittura alla cartella in cui il programma cerca di inserire il nuovo documento.

Office 2010
64Bits Windows Server 2008 R2 Standard

L'applicazione è l'applicazione Windows a 32 bit.

Se aggiungo un ritardo (500 ms) dopo la parola. L'applicazione viene creata, tutto funziona come Normall.

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

Qualcuno sa perché il comando CreateoleObject ora restituisce prima che possa essere utilizzata l'applicazione Word?

È stato utile?

Soluzione 3

L'account amministratore che funziona con il ritardo, sembra non avere nulla con i diritti da fare, ma quella parola si avvia molto più velocemente con questo account rispetto ai normali account utente del dominio.

Posso vivere con la soluzione alternativa, ma se qualcuno sa un modo migliore per favore fammelo sapere.

Altri suggerimenti

Se vuoi rintracciarlo, potresti usare uno strumento come ProcessMonitor Per tracciare le esecuzioni di automazione delle parole fino al punto in cui è possibile utilizzare l'app.

Sembra che si stia svolgendo una sorta di controllo dei diritti, ma mezzo secondo sembra troppo tempo solo per questo.

Potresti provare ad aprire il documento alcune volte o è totalmente Borking dopo aver dato l'errore?

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;

Modificare:

Perfavore guarda la mia risposta qui che fornisce una soluzione migliore e una spiegazione del perché ciò accade.

Mi rendo conto che questo thread è piuttosto vecchio, ma ho risolto questo problema assicurandomi di chiudere il documento prima di smettere (oledocument.close). In tal modo non è necessario alcun tipo di ritardi, ecc. Vedi lo snippet del codice Delphi di seguito.

Esempio:

  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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top