Dongle für Programmstart

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Dongle für Programmstart

    Hallo,

    nach einer längeren Pause stehe ich nun vor einem Problem.

    Ich möchte eine simple "Dongle-Sicherung" einbauen.

    VB.NET-Quellcode

    1. Dim driveNames As New List(Of String)
    2. For Each drive As DriveInfo In My.Computer.FileSystem.Drives
    3. Try
    4. Dim fso As Scripting.FileSystemObject
    5. Dim oDrive As Drive
    6. fso = CType(CreateObject("Scripting.FileSystemObject"), FileSystemObject)
    7. oDrive = fso.GetDrive(drive.Name)
    8. ComboBox1.Items.Add(oDrive.SerialNumber)
    9. Catch ex As Exception
    10. End Try
    11. Next


    Damit gebe ich USB-Seriennummern ein. Danach möchte ich die Combobox auf einen bestimmten Wert überprüfen.

    VB.NET-Quellcode

    1. If ComboBox1.Items.Contains("2029542625") Then
    2. MsgBox("gefunden")
    3. Else
    4. End If


    Ich kann mir nicht erklären warum die Seriennummer nicht erkannt wird, wenn ich mir eine aus der Combobox kopiere und in die Abfrage einsetze.

    Des weiteren ist das ja an sich keine schöne Lösung. Ist es umsetzbar, dass ich mir das ein und auslesen der Combobox spare und direkt eine bestimmte Seriennummer überprüft wird?
    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden.

    Denn von welchem Datentyp ist oDrive.SerialNumber und von welchem ist "2029542625"? Daran könnte es wohl schon scheitern, dass es vermeintlich keine Übereinstimmung gibt.
    Ja sicher kannst Du Dir die ComboBox ersparen. Vergleiche Deine Nummer direkt mit oDrive.SerialNumber. Nur solltest Du Dir eine Möglichkeit überlegen, die gewünschte Nummer nicht fest im Code einzubauen, sonst ist die Sicherheit schnell hinüber.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Selbst wenn die SN nicht einkompiliert ist, ist das unsicher. Dann änder ich den OP Code so, das die Bedingung umgekehrt ist, dann würde das Programm nicht starten wenn das USB-Ding angestöpselt ist, aber wenn dieses gewollte Device nicht da ist.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    @VaporiZed
    Danke. Ich denke, ich bin einen Schritt weitergekommen.

    VB.NET-Quellcode

    1. ​Dim driveNames As New List(Of String)
    2. For Each drive As DriveInfo In My.Computer.FileSystem.Drives
    3. Try
    4. Dim fso As Scripting.FileSystemObject
    5. Dim oDrive As Drive
    6. fso = CType(CreateObject("Scripting.FileSystemObject"), FileSystemObject)
    7. oDrive = fso.GetDrive(drive.Name)
    8. Dim Serialnumber = oDrive.SerialNumber.ToString
    9. Dim Serialnumber1 As String = "1752355126"
    10. If Serialnumber.Equals(Serialnumber1) Then
    11. MsgBox("gefunden")
    12. End If
    13. Catch ex As Exception
    14. End Try
    15. Next


    Zu meinem Verständnis: nun werden alle IDs in der Variable Serialnumber übergeben. Müsste das an sich nicht ein einzigen String mit allen IDs aneinander geben?
    Nein. Serialnumber wird ja in jedem Schleifendurchgang neu deklariert, und die tatsächliche Seriennummer des Schleifendurchganglaufwerks wird reingeschrieben. Und am Ende des Schleifendurchgangs ist der Gültigkeitsbereich ("Scope") der Variable zuende und die Variable samt Inhalt wird verworfen. Da wird nix zwischengespeichert. Wenn Du die Variable außerhalb der For-Schleife deklarierst, würde sie länger leben. aber dann müsstest Du mit Stringverkettung arbeiten, um alle Seriennummern in einem String zu speichern. Oder Du speicherst die Seriennummern alternativ in einer List(Of String). Wobei ich mir Dir wieder die Frage stell, welchen tatsächlichen/ursprünglichen Datentyp SerialNumber hat, wenn es aus der FileSystemObject-Abfrage kommt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.