AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Excel richtig beenden aus Delphianwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Excel richtig beenden aus Delphianwendung

Ein Thema von okoeller · begonnen am 5. Mär 2008 · letzter Beitrag vom 6. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#1

Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 15:21
Hallo,

mit welchem Befehl kann ich einen Excel-Prozess aus dem Speicher/Windows-Task-Manager entfernen?

Wir öffnen mit einer Delphianwendung eine Exceldatei und importieren Kundendaten.
Mit dem Befehl  xxx.Quit wird zwar die sichtbare Excelanwendung geschlossen, aber im Windows-Task-Manager kann man immer noch sehen das ein Excelprozess (EXCEL.EXE) läuft.
Der verschwindet erst, wenn ich meine Delphianwendung schliesse.
Nun kann es aber sein, dass der User aus mehreren xls-Dateien mehrfach Kunden importiert.
Macht er dies 5-mal sind 5 Excel-Prozesse im Speicher.

Wie lässt sich dieser Excel-Prozess aus dem Speicher entfernen, so dass er nicht jedesmal die Delphianwendung schliessen und neu starten muss.


Für ein paar Hinweise wäre ich sehr dankbar.

Oliver
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 15:25
Mit KillProcess vielleicht (killt halt wie der Name schon sagt den Process, in dem Fall dann"Excelexe")!
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#3

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 15:37
Zitat von Larsi:
Mit KillProcess vielleicht (killt halt wie der Name schon sagt den Process, in dem Fall dann"Excelexe")!
Und wo gräbst Du etwas wie 'KillProcess' aus?

Probier's mal hiermit: (keine Ahnung, woher ich den Code ursprünglich habe)
Delphi-Quellcode:
function TForm1.KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(
                        OpenProcess(PROCESS_TERMINATE,
                                    BOOL(0),
                                    FProcessEntry32.th32ProcessID),
                                    0));
     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;
  Mit Zitat antworten Zitat
Kill0r

Registriert seit: 5. Jun 2005
Ort: Zürich
50 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 15:52
Dieses Problem hatte ich auch erst kürzlich
xxx := Unassigned; Nach der Quit Zeile hat mir geholfen, habe dies mal in einem Codeschnippsel gefunden.
Viel Spass beim weiterprogrammieren

Grüsse aus der Schweiz
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 16:30
Hallo,

 xxx := unassigned; brachte leider keinen Erfolg.

Für den KillTask fehlen wohl einige Eintragungen in den uses, z.Bsp. kann ich nichts mit " TProcessEntry32 " anfangen.
"Refactoring/Unit suchen" hat nichts gefunden.

Vielleicht hilft es ja wenn ich mal die Öffnen Prozedur poste.

Delphi-Quellcode:
 
FExcel: Variant;
Delphi-Quellcode:
procedure TExcelImport.OeffneDatei(Dateiname: string);
begin
  try
    FExcel:= CreateOleObject('Excel.Application');
    FExcel.Visible := false;
    FExcel.WorkBooks.Open(Dateiname);
    FSheet := FExcel.Workbooks[1].WorkSheets[1];

  except
    on E:EOleException do
    begin
      FExcel.Quit;
      raise EFileAccessException.Erzeugen('Die Datei konnte nicht geöffnet werden: ' + E.ClassName);
    end;
  end;
end;

Oliver
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 16:40
Ich würde auf jeden Fall von solchen TerminateProcess-Abenteuern abraten. Das behebt nur die Symptome und nicht das zugrunde liegende Problem.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 17:22
Zitat:
Ich würde auf jeden Fall von solchen TerminateProcess-Abenteuern abraten. Das behebt nur die Symptome und nicht das zugrunde liegende Problem.
Ok, wie kann ich denn nun rausfinden woran es liegt das Excel sich nicht aus dem Speicher löschen lässt.????

Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 18:07
Hallo okoeller,

wenn kein Fehler auftritt wird Excel auch nicht geschlossen.

Geh einfach mit F7 die Procedure durch, dann wirst Du sehen, dass der Teil nach except nicht ausgeführt wird, also wird Excel auch nicht geschlossen.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 19:11
Hallo Chemiker,

es gibt natürlich noch eine Schliessen-Methode die nach dem Import aufgerufen wird.
Aber wie oben beschrieben verbleibt eine Excel-Prozedur im Speicher.
Wird der Import erneut aufgerufen sind anschliessend zwei Excel-Prozeduren im Speicher.
Die " xxx.Quit " Methode greift leider nicht.

Delphi-Quellcode:
procedure TExcelImport.QuitExcel;
begin
  FExcel.DisplayAlerts := False; // exit gracefully, no prompts, etc.
  FExcel.Quit;

  { TODO Excel aus dem Speicher löschen}
end;
Gruß
Oliver
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 19:14
bei dem killtask musste glaubich tlhelp32 bei den uses einbinden dann gehts bei mir^^
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz