Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  Lisp
  Problem mit EXCEL-Leiche

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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 (129 / mal gelesen)
Andreas Kraus
Ehrenmitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1502
Registriert: 11.01.2006

WIN 11
ACAD 2022
BricsCAD V25.1.07

erstellt am: 22. Apr. 2025 14:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Vino an!   Senden Sie eine Private Message an Vino  Schreiben Sie einen Gästebucheintrag für Vino

Beiträge: 239
Registriert: 24.05.2005

Windows 10
BricsCAD Pro V23

erstellt am: 22. Apr. 2025 16:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

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




Sehen Sie sich das Profil von CADwiesel an!   Senden Sie eine Private Message an CADwiesel  Schreiben Sie einen Gästebucheintrag für CADwiesel

Beiträge: 1998
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 22. Apr. 2025 17:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

Ich hab noch was im Sumpf gefunden.
Probier das mal beim Schließen von Excel aus
Code:
(vl-catch-all-apply 'vlax-invoke-method (list BookObj "Close" :vlax-false))

------------------
Gruß
CADwiesel
Besucht uns im CHAT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Ehrenmitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1502
Registriert: 11.01.2006

WIN 11
ACAD 2022
BricsCAD V25.1.07

erstellt am: 23. Apr. 2025 11:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1502
Registriert: 11.01.2006

WIN 11
ACAD 2022
BricsCAD V25.1.07

erstellt am: 25. Apr. 2025 09:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz