Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  Inventor beenden

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
Autor Thema:   Inventor beenden (617 mal gelesen)
Ruzy5624
Mitglied
Konstruktionsleiter / staatl. gepr. Techniker


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

Beiträge: 276
Registriert: 01.07.2015

Product Design Suite 2018 Ultimate
Visual Studio 2017
Windows 10 Pro
Intel Xeon E3-1245 v5 @ 3,5GHz
Nvidia Quadro M4000 8GB
RAM 32GB
2x 24" Monitore FullHD
SpaceMouse Pro

erstellt am: 29. Dez. 2017 22: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

Hallo zusammen,

ich habe ein kleines Problem, für das mir auf die schnelle nicht die richtige Lösung einfallen will.

Und zwar habe ich ein AddIn für den Inventor geschrieben, welches auch hervorragend funktioniert, nur eine Kleinigkeit will noch nicht so wie ich möchte...
Und zwar habe ich ein extra Programm erstellt um Updates für mein AddIn zu installieren. Auch das funktioniert soweit sehr gut.
Nun möchte ich aber, dass wenn das externe Programm zum installieren der Updates aufgerufen wird, gleichzeitig die aktuelle Instanz vom Inventor beendet wird.

Und genau da liegt mein Problem, wie schaffe ich es den Inventor ordentlich zu beenden... Im Moment schaffe ich es nur den Inventor mehr oder minder kontrolliert abstürzten zu lassen, um ihn so zu beenden.

Hat hier jemand zufällig die passende Lösung bereit, um Inventor durch das AddIn sauber zu beenden?

------------------
Mit Besten Grüßen

Marcel

[Diese Nachricht wurde von Ruzy5624 am 29. Dez. 2017 editiert.]

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

Ruzy5624
Mitglied
Konstruktionsleiter / staatl. gepr. Techniker


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

Beiträge: 276
Registriert: 01.07.2015

Product Design Suite 2018 Ultimate
Visual Studio 2017
Windows 10 Pro
Intel Xeon E3-1245 v5 @ 3,5GHz
Nvidia Quadro M4000 8GB
RAM 32GB
2x 24" Monitore FullHD
SpaceMouse Pro

erstellt am: 07. Jan. 2018 13:42    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

Hey,

habe mittlerweile eine halbwegs annehmbare Lösung gefunden.
Und zwar prüfe ich einfach, dass keine Dokumente mehr geöffnet sind und beende dann Task von Inventor.
So schließt Inventor einfach, ohne das Aufzeigen von Fehlermeldungen.

Code:
        Dim prclist As Process() = Process.GetProcesses
        For Each p As Process In prclist
            If p.ProcessName = "Inventor" Then
                p.Kill()
            End If
        Next

------------------
Mit Besten Grüßen

Marcel

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

metalgod
Mitglied
Technischer Zeichner, Mädchen für alles


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

Beiträge: 30
Registriert: 23.09.2015

Win10x64
Intel Core i7-8700k, 3.70GHz
16GB Ram
Inventor Prof. 2016 SP2 64-Bit
Visual Studio 2015 Express

erstellt am: 09. Jan. 2018 12:28    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 Ruzy5624 10 Unities + Antwort hilfreich

Hallo Marcel,

hier ist eine andere Möglichkeit eine laufende Inventorinstanz abzufangen und zu beenden:

Code:
Dim invApp As Inventor.Application = System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application")

invApp.Quit()


In der folgenden Funktion (Vorsicht: ungetestet!) habe ich eine Schleife eingebaut, damit jede geöffnete Inventorinstanz geschlossen wird. Dabei wird gewartet, bis die aktuelle Inventorinstanz vollständig geschlossen (bzw. Prozess beendet) wird und erst dann wird auf die nächste Instanz Bezug genommen. Die Funktion sollte "True" zurücklifern, wenn alle Instanzen erfolgreich beendet wurden bzw. keine aktive Instanz gefunden werden kann.

Code:
    Private Function InventorInstanzenBeenden() As Boolean
        Do
            Dim invApp As Inventor.Application = Nothing

            Try
                ' Bezug auf laufende Inventerinstanz:
                invApp = DirectCast(System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application"), Inventor.Application)
            Catch ex As Exception
                ' Keine laufende Inventorinstanz gefunden:
                If ex.Message.StartsWith("Vorgang nicht verfügbar.") Then Return True
                'Throw ex
                Return False
            End Try

            ' Instanz sichtbar machen:
            invApp.Visible = True

            ' Inventorinstanz in den Vordergrund setzen:
            SetForegroundWindow(CType(invApp.MainFrameHWND, IntPtr))

            ' Speichern überspringen:
            Dim SpeichernUeberspringen As Boolean = True
            If invApp.Documents.Count > 0 Then '.VisibleDocuments
                If MessageBox.Show("Sollen geöffnete Dokumente gespeichert werden?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                    SpeichernUeberspringen = False
                End If
            End If

            ' Alle Dokumente schließen:
            For Each ivDok As Inventor.Document In invApp.Documents '.VisibleDocuments
                ivDok.Close(SpeichernUeberspringen)
            Next

            ''
            'If invApp.Documents.Count > 0 Then
            '    Debug.Print("Nicht alle Dokumente wurden geschlossen. Vorgang abgebrochen!")
            '    Return False
            'End If

            ' ProzessID festlegen:
            Dim pID As Integer
            GetWindowThreadProcessId(CType(invApp.MainFrameHWND, IntPtr), pID)

            ' Bezug auf Prozess:
            Dim p As Process = Process.GetProcessById(pID)

            ' Inventor beenden:
            invApp.Quit()

            ' COM-Objekt freigeben:
            System.Runtime.InteropServices.Marshal.ReleaseComObject(invApp)
            invApp = Nothing

            ' warten, bis Prozess beendet wird:
            Do Until p.WaitForExit(1)
                'System.Threading.Thread.Sleep(3000)
                Application.DoEvents()
            Loop
        Loop
    End Function

        'Quelle: http://www.pinvoke.net
    <Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, _
                          ByRef lpdwProcessId As Integer) As Integer

    End Function

    <Runtime.InteropServices.DllImport("user32.dll")> _
    Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As <Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.Bool)> Boolean
    End Function



------------------
alex

[Diese Nachricht wurde von metalgod am 09. Jan. 2018 editiert.]

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

Ruzy5624
Mitglied
Konstruktionsleiter / staatl. gepr. Techniker


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

Beiträge: 276
Registriert: 01.07.2015

Product Design Suite 2018 Ultimate
Visual Studio 2017
Windows 10 Pro
Intel Xeon E3-1245 v5 @ 3,5GHz
Nvidia Quadro M4000 8GB
RAM 32GB
2x 24" Monitore FullHD
SpaceMouse Pro

erstellt am: 10. Jan. 2018 21:15    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

Hey,

ich habe nun einmal die Zeit gefunden den von dir zur Verfügung gestellten Code zu testen und ich muss sagen das dieser hervorragend funktioniert.

Ich habe Ihn etwas auf meine Bedürfnisse angepasst und nun wird Inventor sauber beendet und nicht mehr einfach zwangsabgeschossen.

Besten Dank für diesen hilfreichen Anstoß.

------------------
Mit Besten Grüßen

Marcel

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)2020 CAD.de | Impressum | Datenschutz