| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
|
Autor
|
Thema: Problem mit EXCEL-Leiche (161 / mal gelesen)
|
Andreas Kraus Ehrenmitglied Elektrotechniker
    
 Beiträge: 1502 Registriert: 11.01.2006 WIN 11 ACAD 2022 BricsCAD V25.1.07
|
erstellt am: 22. Apr. 2025 14:57 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, manchmal finde ich über den Taskmanager ein Excel das aber nur, warum auch immer, nicht richtig beendet wurde. Natürlich lässt sich dieser Task einfach beenden aber wenn ich aus Lisp auf Excel zugreifen möchte bekomme ich dann genau dieses untote Excel. Also Taskmanager aufrufen, dieses Excel beenden und alles nochmal starten. Das nervt. Ich habe schon versucht das Ding mit Quit zu beenden, funktioniert ja bei "lebendem" Excel, hier leider nicht. Ich kann dort auch arbeiten (Workbooks erstellen, Daten eintragen, usw.) nur beenden kann ich das eben nur über den Taskmanager. Ich hab auch rausgefunden wie ich erkenne ob das Excel gestorben ist, aber beenden und mit dem "lebenden" Excel weitermachen geht nicht. (vlax-invoke-method excel "Quit") funktioniert bei diesem Excel nicht. Alles andere geht. (vla-put-visible excel 1) (VLAX-INVOKE-METHOD Workbooks "Add") Alles kein Problem aber das ist ja nicht die aktuell geöffnete Excel-Datei, also nutzlos. Hat jemand eine Idee wie ich das Ding killen kann ? ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vino Mitglied
 
 Beiträge: 239 Registriert: 24.05.2005 Windows 10 BricsCAD Pro V23
|
erstellt am: 22. Apr. 2025 16:34 <-- editieren / zitieren --> Unities abgeben:          Nur für Andreas Kraus
Hallo, in der Kommandozeile kannst du Prozesse mit TASKKILL beenden. Mit einem (STARTAPP "cmd /c TASKKILL...") (oder zur Not evtl. sowas wie DOSLib oder eine temporäre Batch-Datei) sollte das dann funktionieren. Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
    

 Beiträge: 1998 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 22. Apr. 2025 17:51 <-- editieren / zitieren --> Unities abgeben:          Nur für Andreas Kraus
|
Andreas Kraus Ehrenmitglied Elektrotechniker
    
 Beiträge: 1502 Registriert: 11.01.2006 WIN 11 ACAD 2022 BricsCAD V25.1.07
|
erstellt am: 23. Apr. 2025 11:45 <-- editieren / zitieren --> Unities abgeben:         
Hm ... Ich habe TASKKILL mit verschiedensten Ideen auf den Weg geschickt und ich habs jetzt  . Hier etwas Lisp mit dem es funktioniert. Hab ich grade eben zusammengestückelt, muss das noch in schön machen Appli? hab ich mir mal irgendwo runtergeladen und die Rückgabe um die Prozess-ID ergänzt.
Code: (defun k_collection->list (collection / liste) ;;; gibt eine VLA-Collection als Liste zurück (cond ((member "VLA-COLLECTION->LIST" (atoms-family 1)) (setq liste (VLA-COLLECTION->LIST collection)) ) ((member "VLAX-FOR" (atoms-family 1)) (setq liste (list)) (vlax-for dummy collection (setq liste (cons dummy liste)) ) (reverse liste) ) ) liste) (defun Appli? (/ apps item lst meth1 meth2 WMI) (setq WMI (vlax-create-object "WbemScripting.SWbemLocator") meth1 (vlax-invoke WMI 'ConnectServer nil nil nil nil nil nil nil nil) meth2 (vlax-invoke meth1 'ExecQuery "Select * from Win32_Process") ) (setq lst (mapcar '(lambda (item) (list (vlax-get item 'CommandLine) (vlax-get item 'processID)) ) (vl-remove-if-not '(lambda (process) (vlax-get process 'CommandLine)) (k_collection->list meth2)) ) ) (vlax-release-object WMI) (vlax-release-object meth1) (vlax-release-object meth2) lst ) (if (and (setq process-id (cadr (car (vl-remove-if-not '(lambda (data) (wcmatch (strcase (car data)) "*EXCEL*") ) (Appli?) ) ) ) ) (setq excel (vlax-get-object "excel.application")) (= (vla-get-visible excel) :VLAX-FALSE) (null (vlax-get-property excel "ActiveWorkbook" ) ) ) (progn (vlax-release-object excel) (startapp (strcat "cmd /c TASKKILL /PID " (itoa process-id) " /F")) ) )
EDIT: grade gemerkt ... ist noch nicht zu 100% ok , ist aber kurz vorm Ziel Nochmal EDIT: Habs im Code geändert, jetzt sollte das passen
------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de [Diese Nachricht wurde von Andreas Kraus am 23. Apr. 2025 editiert.] [Diese Nachricht wurde von Andreas Kraus am 23. Apr. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
    
 Beiträge: 1777 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 25. Apr. 2025 08:11 <-- editieren / zitieren --> Unities abgeben:          Nur für Andreas Kraus
Hallo Andreas, danke für Deine Ausführungen. Ich habe für mich das noch ein bißchen abgewandelt. Damit kann ich dann beim Programmieren meine Excel-Leichen aus dem Task-Manager aufräumen, die ich per COM gestartet habe. Alle anderen Excel-Tasks bleiben erhalten. Im Schnelltest hatte es funktioniert: Code:
(defun c:KillExcelByComTasks ( / ) (foreach X (vl-remove-if-not '(lambda (data) (wcmatch (strcase (car data)) "*EXCEL*AUTOMATION -EMBEDDING*") ) (Appli?) ) (setq excel (vlax-get-object "excel.application")) (setq process-id (cadr X)) (vlax-release-object excel) (startapp (strcat "cmd /c TASKKILL /PID " (itoa process-id) " /F")) ) )
------------------ viele Grüße Jörn http://www.bosse-engineering.com Der Multifilter (V 1.1) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Andreas Kraus Ehrenmitglied Elektrotechniker
    
 Beiträge: 1502 Registriert: 11.01.2006 WIN 11 ACAD 2022 BricsCAD V25.1.07
|
erstellt am: 25. Apr. 2025 09:57 <-- editieren / zitieren --> Unities abgeben:         
Hab nach Taskkill noch ein "schaltbares" Delay eingebaut. Wenn ich einfach nur killen möchte brauch ich das nicht aber wenn ich mit (setq excel (vlax-get-or-create-object "excel.application")) sofort danach ein neues Excel starten will, hat das eben nicht funktioniert. Mit einem Delay von 1-2 Sekunden gehts. Hab jetzt keine Lust weiter zu forschen, jetzt gehts ja. Schalten kann ich dann ob ich ein Delay möchte/brauche oder nicht ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |