VB 6 Programm startet vb.net Programm

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von VBdet.

    VB 6 Programm startet vb.net Programm

    Hallo,

    ich habe ein seltsamen und, so glaube ich, schwieriges Problem:

    Ein altes und umfangreiches VB 6 Programm (Neuschreiben zwecklos) möchte einfach nur eine Outlook Mail erstellen.
    Mit früheren Office Versionen kein Problem, aber mit Office 2016 kann VB 6 scheinbar nicht mehr umgehen. Es wird zumindest keine Mail erzeugt, sondern es erscheint eine Meldung: "Die Aktion kann nicht beendet werden, da die andere Anwendung nicht verfügbar ist...".


    Als Workaround dachte ich, ich schreibe ein kleines Programm mit Visual Studio 2017, das alte VB 6 Programm startet das kleine, neue Visual Studio Programm und das erstellt dann die Outlook Email.

    Leider passiert jetzt folgendes: Starte ich das neue, kleine VS2017 Programm aus dem Windows Explorer heraus, funktioniert es problemlos.
    Starte ich das kleine VS2017 Programm durch das alte VB 6 Programm (...Shell()...) funktionert das VS2017 Programm nicht.
    Es startet zwar und es kann normal bedient werden, sobald es aber seinen eigentlichen Zweck erfüllen soll, eine neue Outlook Email zu kreieren, kommt die Meldung "Die ActiveX-Komponente kann nicht erstellt werden."

    Nochmal erklärt...
    Starte ich das VS2017 Programm aus dem Windows Explorer heraus, funktioniert es. Starte ich es über einen Aufruf aus einem alten VB 6 Programm, funktioniert es ab der Erstellung der Email nicht.

    Hat da einer eine Idee ?
    Hallo

    Da stellen sich mir zwei fragen:

    Wie sieht der Code des VB Programs aus welcher das VB.Net startet.
    Wie sieht der Code des Vb.Net Programs aus welcher das Mail schickt.

    Von welchem Programm kommt die Fehlermeldung?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Vielen Dank für die Fragen und dass ihr euch mit meinem Problem beschäftigt habt.

    Ich bin mittlerweile einen Schritt weiter...
    So wie es aussieht, besteht das Problem nur, wenn ich das VS2017 Programm aus der Entwicklungsumgebung des VB 6 Programm heraus starten will. Kompliere ich das VB 6 Programm und nutze ich dann die entstehende Exe-Datei, startet die VB 6 Exe das VS2017 Programm und es funktioniert.
    Das hatte ich bisher nicht bemerkt, weil ich beim Entwickeln die Probleme hatte und noch keine Exe des VB Programms erstellt hatte.
    Im Moment sieht es also so aus, als ob das Problem mit der fertigen VB6.exe nicht besteht.
    Also alles gut !

    Trotzdem möchte ich natürlich eure Fragen beantworten:

    Das Office 2016 ist 64 bit.
    VS2017 Programm gestellt auf "Any CPU".
    Die Fehlermeldung kommt vom VS2017 Programm (wenn ich es über die Entwicklungsumgebung des VB 6 Programm aus starte).


    Der Code des VB Programms, der das .Net Programm startet ist einfach:

    Starte = Shell(Chr$(34) + PfadUndNameVS2017Programm + Chr$(34) + " " + AnweisungenFürDasVS2017Programm, vbNormalFocus)
    (Das funktioniert soweit auch aus der VB6 Entwicklungsumgebung)


    Der "wichtige" Code des VS2017 Programms


    Public Sub SendMail(ByVal Betreff As String, ByVal HtmlBodytext As String, Optional ByVal Empfaenger As String = "testmail@test.de", Optional ByVal Anhang As String = "Datei als Anhang")

    Try
    '--- Check ob der Outlook Prozess läuft (Bei Windows 8 zwingend notwendig)
    If Process.GetProcessesByName("outlook").Count > 0 Then
    '--- Tue nichts, alles fein ---
    Else
    '--- Outlook starten ---
    Process.Start("outlook")
    'Application.DoEvents
    End If

    '--- notwendige Objekte des Outlook Objektmodels initialisieren ---
    Dim objOutlook As Object
    Dim objOutlookMsg As Object
    Const cMailItem = 0

    '--- evtl. weitere wichtige, selbsterklärende Konstanten ---
    'Const cBCC = 3
    'Const cImportanceHigh = 1
    'Const cCC = 2
    Const cTo = 1

    '--- erstellen der notwendigen Objekte ---
    objOutlook = CreateObject("Outlook.Application")
    objOutlookMsg = objOutlook.CreateItem(cMailItem)

    '--- Zusammenstellen der Mail ---
    With objOutlookMsg
    Dim objOutlookRecip As Object = .Recipients.Add(Empfaenger)
    objOutlookRecip.type = cTo
    .Subject = Betreff
    .HtmlBody = HtmlBodytext
    If Anhang <> "Datei als Anhang" Then .Attachments.add(Anhang)
    '.Importance = olImportanceHigh
    .Display() ' Display() zeigt die neue Nachricht, .Send() sendet direkt
    End With

    '--- Objekte zerstören ---
    objOutlookMsg = Nothing
    objOutlook = Nothing

    End 'Ende des Programms

    Catch ex As Exception

    '--- Fehler abfangen falls kein Outlook installiert ist ---
    MsgBox(ex.Message)
    '----------------------------------------------------------

    End Try

    End Sub