Ich habe VB.NET eine App entwickelt. Es funktioniert gut, aber das Ende der Ausführung ist nicht ganz sauber.
Die Anwendung meldet sich bei SOLIDWORKS an: swApp = New SldWorks
Es ist eine ganze Menge los...
Dann schließe ich das Dokument: swApp.CloseDoc(sDocfilename)
Es ist noch viel los und das Programm neigt sich dem Ende zu
Logischerweise habe ich ein leeres Solidworks-Fenster, das offen bleibt. Wenn ich es mit der Hand schließe, sehe ich, dass der SLDWORKS-Prozess dann mit einem "-Embedding" in der Befehlszeile in die Liste der "Hintergrundprozesse" geht. Ich bemerke das gleiche Phänomen, wenn ich den Code hinzufüge: swApp.ExitApp() .
Diese SolidWorks Sitzung im Hintergrund führt zum Absturz neuer Sitzungen. Also musst du ihn mit der Hand töten.
Um dies zu vermeiden, können Sie am Ende des Programms eine Schleife erstellen, die alle aktiven Prozesse auflistet, und die "SLDWORKS.exe" Prozesse "beenden", was ich bei allen meinen Programmen (C#) tue, die Solidworks zu einem bestimmten Zeitpunkt steuern.
Ich habe mich gefragt, ob es für meine Anwendung eine Möglichkeit gibt, diese untergeordneten Prozesse aufzulisten. Aber es sieht nicht einfach aus.
Alle Solidworks-Prozesse zu töten, erscheint mir etwas brutal. Meine Anwendung wird als Aufgabe gestartet (wenn ein Dokument genehmigt wird) und es wäre eine Schande, die Sitzung des Benutzers zu beenden.
Ich hatte es schon gemerkt und es kam mir kompliziert vor. Ich hatte auf etwas Einfacheres und Unkomplizierteres in system.diagnostic.process oder so etwas gehofft.
Also werde ich mir die Zeit nehmen, mich mit diesem Beispiel zu befassen.
Wenn es Ihnen für Ihre Bedürfnisse zu komplex erscheint und Sie mit Sicherheit auf Probleme stoßen werden, die mit den für die Nutzung dieser Funktionen erforderlichen Rechten verbunden sind, können Sie dies möglicherweise umgehen, indem Sie zum ersten Vorschlag zurückkehren (Um daraus herauszukommen, können Sie am Ende des Programms, Erstellen Sie eine Schleife, die alle aktiven Prozesse auflistet, und "killen" Sie die "SLDWORKS.exe"-Prozesse, aber beenden Sie nur den Prozess, dessen "MainWindowTitle" einen bestimmten Wert enthält, einen Wert, den Sie definieren können, indem Sie z.B. einen Raum mit einem "seltsamen" Namen erstellen, bevor Sie diesen Prozess beenden. Auf diese Weise können Sie weiterhin einfach und direkt auf system.diagnostic.process zugreifen .