Results 1 to 14 of 14

Thread: Word blijft lang actief in TaskMgr na afsluiten Word

  1. #1

    Word blijft lang actief in TaskMgr na afsluiten Word

    Bij een applicatie start ik Word op (TWordApplication), en open een document, zodat de gebruiker dit kan bewerken.

    Dmv de methods
    WordApp.OnQuit := WordAppQuit;
    WordApp.OnDocumentBeforeClose := WordDocumentBeforeClose;
    WordApp.OnDocumentBeforeSave := WordDocumentBeforeSave;
    vang ik af als de gebruiker het document sluit (Kruisje klikt), waarna ik het document in een DB opsla. Heeft altijd perfect gewerkt, maar sinds 2 weken kan de gebruiker, na afsluiten van Word, ca. 20 á 30 seconden niets meer doen, de applicatie bevriest volledig. Na veel testen erachter gekomen dat er in de TaskMgr een Word-applicatie blijft staan, die pas na enige tijd (inderdaad, 20 á 30 seconden) verdwijnt, en daarmee de applicatie weer vrijgeeft. Iemand enig idee waar dit vandaan komt (zal wel een of andere update zijn geweest), en, belangrijker, hoe dit op te lossen?

    Gebruikte Office-versies zijn Office 365 en Office 2016.
    Add one binary to 1, and suddenly
    you end up with 10.

  2. #2
    En wat gebeurt er in die events? Heb je daar logging in staan om te kijken wat je doe op OnQuit, hoe lang dat duurt, en wanneer dat gebeurt (aan het begin of het eind van die 30 seconden)? Gebeurt het nog steeds als je geen events koppelt?
    1+1=b

  3. #3
    Dit is een klein testprojectje, doet exact hetzelfde als de normale applicatie:

    Delphi Code:
    1. uses Word2010, ComObj,
    2.  
    3.  
    4. procedure TForm8.Button1Click(Sender: TObject);
    5. begin
    6.   try
    7.     WordApp := TWOrdApplication.Create(Self);
    8.   except
    9.  end;
    10.  
    11.   WordApp.visible := true;
    12.   WordApp.DisplayAlerts := wdAlertsNone;
    13.           WordApp.OnQuit := WordAppQuit;
    14.           WordApp.OnDocumentBeforeClose := WordDocumentBeforeClose;
    15.           WordApp.OnDocumentBeforeSave := WordDocumentBeforeSave;
    16.  
    17.           Document := WordApp.Documents.Open('c:\temp\test.docx', EmptyParam, EmptyParam, EmptyParam,
    18.                                               EmptyParam, EmptyParam, EmptyParam, EmptyParam,
    19.                                               EmptyParam, EmptyParam, EmptyParam, EmptyParam,
    20.                                               EmptyParam, EmptyParam, EmptyParam, EmptyParam);
    21. end;
    22.  
    23. procedure TForm8.WordDocumentBeforeClose(ASender: TObject;
    24.   const Doc: WordDocument; var Cancel: WordBool);
    25. var
    26.   cFileName: String;
    27.   oHandle: THandle;
    28. begin
    29.   Cancel := False;
    30.  
    31.   if not Doc.Saved then
    32.   begin
    33. // Haal applicatie naar voorgrond
    34.     TWordApplication(ASender).Visible := False;
    35.     oHandle := Application.Handle;
    36.  
    37.     try
    38.       if oHandle > 0 then
    39.         SetForegroundWindow(oHandle);
    40.     finally
    41. //      CloseHandle(oHandle);
    42.     end;
    43.  
    44.     if MessageDlg('Opslaan? ', mtInformation, [mbYes, mbNo], 0) = mrYes then
    45.     begin
    46. //      Doc.Save;
    47.       Doc.SaveAs('c:\temp\test1.docx', wdFormatDocumentDefault, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
    48.       EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
    49.       EmptyParam, EmptyParam, EmptyParam);
    50.       Doc.Saved := True;
    51.     end
    52.     else
    53.     begin
    54.       Doc.Saved := True;
    55.     end;
    56.   end
    57.   else
    58.   showmessage('doc not saved');
    59. end;
    60.  
    61. procedure TForm8.WordDocumentBeforeSave(ASender: TObject;
    62.   const Doc: WordDocument; var ShowUI, Cancel: WordBool);
    63. begin
    64.   ShowUI := False;
    65.   Cancel := False;
    66. end;
    67.  
    68. procedure TForm8.WordAppQuit(Sender: TObject);
    69. begin
    70.   WordApp.Disconnect;
    71.  
    72. // Deze breekt het opslaan van grotere documenten voortijdig af
    73. // KillTask('WinWord');
    74. end;
    75.  
    76. function TForm8.KillTask(ExeFileName: string): Integer;
    77. const
    78.   PROCESS_TERMINATE = $0001;
    79. var
    80.   ContinueLoop: BOOL;
    81.   FSnapshotHandle: THandle;
    82.   FProcessEntry32: TProcessEntry32;
    83. begin
    84.   Result := 0;
    85.   FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    86.   FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
    87.   ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
    88.  
    89.   while Integer(ContinueLoop) <> 0 do
    90.   begin
    91.     if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
    92.       UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
    93.       UpperCase(ExeFileName))) then
    94.       Result := Integer(TerminateProcess(
    95.                         OpenProcess(PROCESS_TERMINATE,
    96.                                     BOOL(0),
    97.                                     FProcessEntry32.th32ProcessID),
    98.                                     0));
    99.      ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    100.   end;
    101.   CloseHandle(FSnapshotHandle);
    102. end;
    Last edited by GolezTrol; Yesterday at 14:45.

  4. #4
    Code even tussen tags plaatsen?
    Leest wat makkelijker.

    Bart

  5. #5
    Het is de vraag of het met Delphi of met Windows samenhangt.
    Wat gebeurt als je Word helemaal buiten Delphi om gebruikt en afsluit? Blijft Word dan ook lang hangen (dus zichtbaar in de taskmanager?).

  6. #6
    Als Word wordt opgestart vanuit Explorer of shortcut, dan blijft Word daarna ook lang zichtbaar in de taskmanager. Start ik Word vanuit een DOS-prompt dan is 'ie na afsluiten ook meteen verdwenen uit taskmanager.

  7. #7
    Sorry, had snel geplakt. Alleen Button1-stukje (zonder OnQuit en OnDocumentbeforeClose/Save-events) was al voldoende geweest.

  8. #8
    Dus het staat helemaal los van je applicatie of wat je ermee doet? Wel gek dat verkenner en command prompt een verschillend resultaat geven....

    Blijkbaar wel een bekend probleem dat Word nog even blijft hangen... (Word 2013). Kan mogelijk veroorzaakt worden door andere macro's of extensions.
    Last edited by GolezTrol; Yesterday at 14:56.
    1+1=b

  9. #9
    Was die ook tegengekomen. Maar op alle PC's draaien geen macro's. Probleem is ook op alle PC's tegelijk ontstaan, zonder dat applicatie is aangepast, dat is het vreemde.

  10. #10
    Dan is een update van de virusscanner of van Windows de verdachte ...

  11. #11
    Virusscanner sluit ik uit, omdat andere test-pc's geen of een andere virusscanner hebben. Windows of Office-update zit er dik in, maar hoe los ik het op? Ben nu bezig om een KillTask te implementeren via een Timer. WordQuit start dan de Timer op met kleine vertraging, Timer gaat door alle processen heen en killed alle Word-processen. Is geen elegante oplossing, maar denk wel een werkbare. Maar zou liever willen weten waar het precies vandaan komt, en hoe netjes op te lossen.

  12. #12
    Quote Originally Posted by TheMadMan View Post
    Timer gaat door alle processen heen en killed alle Word-processen.
    Uiteraard kan dit tot corrupte bestanden leiden als Word nog bezig is met schrijven van bestanden (zoals je zelf aangaf).

    Heb je overigens de preview pane van de explorer uit staan?

  13. #13
    Preview staat uit. Corrupte bestanden zou kunnen, maar lijkt me onwaarschijnlijk, omdat opslaan in de achtergrond uit staat bij alle Word-implementaties. Document wordt in OnBeforeClose-event op schijf opgeslagen, waarna pas OnQuit volgt. OnQuit start Timer op (250ms vertraging), welke dan weer het document naar DB streamed. Ben nu volop aan het testen met grote documenten om te zien of ik de Timer-delay afhankelijk kan/moet maken van het aantal pagina's. In de Timer geef ik als test het Word-document ook een andere naam op schijf terwijl Word dus nog min of meer open staat, dit gaat zonder problemen, applicatie en Word klagen hier niet over (dus ga er van uit dat Word het document niet meer in gebruik heeft). Maar grote vraag blijft uiteraard: Waarom doet Word dit nu plotseling (de applicatie blokkeren bedoel ik dan), en voorheen nooit.

  14. #14
    Heb je de laatste versie van Word? Ik heb gisteren lopen testen en had hetzelfde probleem. Na een Word update en een reboot lijkt het probleem opgelost te zijn.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •