Verständnisproblem RasDial

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von slice.

    Verständnisproblem RasDial

    Hallo zusammen,
    ich bin neu hier und hoffe auf diesen Seiten viele nützliche Informationen zu bekommen.
    Aber leider hab ich schon jetzt ein kleines Problem, bei dem es wahrscheinlich einfacher ist zu fragen als sich die Finger wund zu googlen ;)

    Ich möchte es so kurz wie möglich Beschreiben:

    Ich bi dabei meine erste Windows Forms Anwendung mit VB.net zu schreiben. Ich habe Programmier Erfahrung im Microsoft ERP Bereich und in Access in dem ich (logischerweise) Datenbankanwendungen geschrieben habe. Aber leider sind meine Erfahrungen in VB.net dürftig ..... um nicht zu sagen ich bin absoluter Neuling.

    Aber zurück zu meiner Frage. Meine Anwendung soll unter anderem eine VPN Verbindung aufbauen und auch wieder trennen können. Ich habe also einen Button "btnVPN" angelegt und den entsprechenden Code ins Klick Ereignis gesetzt. Wenn ich aber jetzt die Verbindung herstellen will bekomme ich folgende Fehlermeldung:

    "Ein Ausnahmefehler des Typs "System.CompomentModel.Win32Exception" ist in System.dll aufgetreten"

    Quellcode

    1. Private Sub btnVPN_Click(sender As Object, e As EventArgs) Handles btnVPN.Click
    2. 'VPN verbinden
    3. Dim ADSL As String
    4. ADSL = My.Settings.IP
    5. Dim user As String
    6. user = My.Settings.User
    7. Dim password As String
    8. password = My.Settings.Password
    9. System.Diagnostics.Process.Start("rasdial.exe" & "" & ADSL & "" & user & "" & password)
    10. End Sub


    Mir ist ziemlich schnell klar geworden das es was mit der Anmeldung bzw. den Anmeldedaten zu tun haben muss. Daher habe ich mir (um sicher zu gehen) per MsgBox die Rückgabewerte für "ADSL", "user" und "password" anzeigen lassen. Alles wie erwartet. Anschließend habe ich die entsprechenden Angaben für VPN Name, Username und Passwort direkt in den Code geschrieben.

    Quellcode

    1. System.Diagnostics.Process.Start("rasdial.exe vpnConnection User Password")


    Der Connect läuft ohne Probleme und anschließend beim entsprechenden Ereignis der Disconnect auch. Also ist mir klar geworden das ich da einen Denkfehler drin haben muss. Ich sehe nur leider den Wald vor lauter Bäumen nicht mehr.

    Ich bitte um Hilfe.....villeicht zeigt mir jemand den richtigen Baum und erklärt mir sogar warum er gerade an dieser Stelle steht ;)
    Vielen lieben Dank schon mal für Eure Mühe

    Edit meint:

    Ich verwende Visual Studio Express 2013.
    Willst du nicht vielleicht erstmal was einfacheres schreiben? Vielleicht einen Editor oder so, auch, um dich mit dem WYSIWYG-Editor vertrauter zu machen. Vielleicht hilft dir auch das hier: microsoft.com/germany/visualst…how.aspx?id=msdn_de_49057
    Vielen Dank für die Antwort und für den Link. Der wird mir in Zukunft bestimmt gute Dienste leisten. Auch vielen lieben Dank für den gut gemeinten Ratschlag etwas einfacheres zu machen. Ds ist durch aus richtig, aber diese Sache hat micht jetzt so genervt das ich das einfach lösen wollte und auch gelöst habe.....anscheinend liebe ich die Herausforderung ;). Naja wie so oft ist die Lösung, wenn man sie dann mal gefunden hat, gar nicht so kompliziert wie angenommen.

    In meinem Fall war es letztendlich ein Syntax Problem und die Nutzung der Shell zum Verbinden und kein grober Fehler im grundsätzlichen Gedanken. Der abgeänderte und (endlich) auch funktionierende Code lautet:

    Quellcode

    1. ''Nutzerdaten zuweisen
    2. Dim ADSL As String
    3. ADSL = My.Settings.IP
    4. Dim user As String
    5. user = My.Settings.User
    6. Dim password As String
    7. password = My.Settings.Password
    8. ' VPN Verbindung aufrufen
    9. Call Shell("rasdial """ & ADSL & """ " & user & " " & password)


    Aber wie gesagt in Dynamics NAV kann ich programmieren aber VB.NET ist für mich neu und daher noch einmal vielen Dank für den Link zum Buch. Es wird bestimmt hilfreich sein.
    Noch so als Tipp, auf MSDN findet man meist die bestbeschriebene Erklärung und Lösung zu einem Problem, also lieber erstmal da nachschlagen wenn du wieder Probleme hast, geht oft schneller als hier zu fragen, da MSDN wirklich fast alles auf dem Silbertablett serviert.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    in vb.net kann man eleganter formulieren

    VB.NET-Quellcode

    1. Dim ADSL As String = My.Settings.IP
    2. Dim user = My.Settings.User 'Option Infer On gestellt: es geht sogar ohne Angabe des Datentyps, denn der Compiler kennt den Datentyp des Settings
    3. Dim password= My.Settings.Password
    4. Shell("rasdial """ & ADSL & """ " & user & " " & password)
    5. 'oder gleich
    6. With My.Settings
    7. Shell("rasdial """ & .IP & """ " & .User & " " & .Password)
    8. End With


    Für Einsteiger auch nützlich ist VisualStudio richtig nutzen (Google ist nicht deine Mami)

    ach nochwas - quasi die Todo-List des Lern-Pensums: Datenverarbeitungs-Vorraussetzungen

    Für dich werden evtl. "Option Strict On" und "Böse Funktionen vermeiden" noch die ersten Fußangeln sein, die ein für allemal zu beheben wären.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Nur nimm nicht die Shellfunktion.
    Das geht super mit der Process-Klasse.
    Außerdem dürfte in der Exception noch mehr stehen(vmtl. in der InnerException)...
    Aber wenn du den Code tatsächlich 1:1 hier rein kopiert hast, dürfte der Fehler doch klar sein:

    galnar schrieb:


    System.Diagnostics.Process.Start("rasdial.exe" & "" & ADSL & "" & user & "" & password)

    da fehlen Überall Leerzeichen, dein String sieht am Ende so aus:
    rasdial.exevpnConnectionUserPassword
    das Programm findet Windows natürlich nicht...

    VB.NET-Quellcode

    1. System.Diagnostics.Process.Start("rasdial.exe " & " " & ADSL & " " & user & " " & password)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Shell hat m.M.n. nichts in einer VB.Net Anwendung zu suchen.
    Process.Start-Methode (String, String)

    Visual Basic-Quellcode

    1. System.Diagnostics.Process.Start("rasdial.exe", String.Format("{0} {1} {2}", ADSL, user, password))