Brauche Hilfe beim Übersetzen eines VBScript in die Sprache VB

  • VB.NET

Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von Th3RaZe.

    Brauche Hilfe beim Übersetzen eines VBScript in die Sprache VB

    Guten Tag Community,

    In meinem Praktikum in einer Informatik Firma , hab ich den Auftrag ein VBScript zu übersetzen und in die Sprache VB in einem Consolenprogramm auszuführen, da ich noch nie mit VBS arbeiten musste war der Anfang schwer, aber mit der Zeit hab ich schon verstanden wie man es am besten macht, eine Fehlermeldung bekomme ich nicht weg und hoffe ihr könnt mir Helfen die Fehlermeldung ist "System.TypeInitializationException" und der Code ist.

    VB.NET-Quellcode

    1. isWin8 = (Key(66) \ 6) And 1


    ich hoffe ihr wisst eine Lösung , ich hab das ganze Internet durchgeguckt und mich hier extra Registriert mfg Alexander

    VB.NET-Quellcode

    1. ​Dim isWin8 As Integer
    2. isWin8 = (Key(66) \ 6) & 1
    3. i = 24
    4. Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)
    5. Chars = "BCDFGHJKMPQRTVWXY2346789"

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

    Willkommen im Forum. :thumbup:

    Th3RaZe schrieb:

    TypeInitializationException
    Was ganz genau int Key(66)? Funktion / Array?
    Was genau kommt von da zurück?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Was ganz genau int Key(66)? Funktion / Array?Was genau kommt von da zurück?


    Key hat den einen Wert schon zugewiesen bekommen als Globalen String

    VB.NET-Quellcode

    1. Dim Key As String = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"


    also Key ist ein Array , das Problem danach ist immer das bei der Gleichen Zeile dann immer die nächste Fehlermeldung kommt das es außerhalb des Arrays ist.
    Ich Verstehe es so das die Value in Key 66 groß ist.

    Th3RaZe schrieb:

    Ich Verstehe es so das die Value in Key 66 groß ist.
    Nicht nur.
    Du dividierst den String "Bratwurst" durch 6.
    Was genau soll da rauskommen? Richtig, das geht gar nicht.
    Fang also an und formuliere ein ordentliches Problem und benenne die Randbedingungen vollständig.
    Am besten ist es wohl, Du schmeißt das Script weg und löst die Aufgabe von Grund auf mit .NET.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Warum so aggressiv ?
    Dieses Script ist von meinen Vorgesetzten , es Funktioniert einbahnfrei, deswegen verstehe ich nicht warum ich es wegschmeißen soll, ein VBS ähnelt VB sehr gut und laut ihm ist es auch kein Problem es zu übersetzen

    @xtts02
    Danke :) hab die DigitalID noch dran gehängt damit die 66 erreicht wird, aber dennoh ist der gleiche Fehler , beim Debugger sehe ich das Key den Wert auch besitzt.

    Vollzitate entfernt. ~Thunderbolt

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

    Das ist nicht aggressiv, sondern intensiv.
    So lange Du nicht merkst, dass Deine Umsetzung Murks ist, müssen wir hier nicht weitermachen, denn Du kosmetisierst die Symptome, an statt die Ursachen zu bereinigen. 8o

    Zitat entfernt. ~Thunderbolt
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    Ich denke Er will den Key von Windows auslesen mit diesem Code :

    VB.NET-Quellcode

    1. Option Explicit
    2. Dim objshell,path,DigitalID, Result
    3. Set objshell = CreateObject("WScript.Shell")
    4. Path = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
    5. DigitalID = objshell.RegRead(Path & "DigitalProductId")
    6. Dim ProductName,ProductID,ProductKey,ProductData
    7. ProductName = "Product Name: " & objshell.RegRead(Path & "ProductName")
    8. ProductID = "Product ID: " & objshell.RegRead(Path & "ProductID")
    9. ProductKey = "Product Key: " & ConvertToKey(DigitalID)
    10. ProductData = ProductName & vbNewLine & ProductID & vbNewLine & ProductKey
    11. WScript.echo ProductData
    12. Function ConvertToKey(Key)
    13. Const KeyOffset = 52
    14. Dim isWin8, Maps, i, j, Current, KeyOutput, Last, keypart1, insert
    15. 'Check if OS is Windows 8
    16. isWin8 = (Key(66) \ 6) And 1
    17. Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)
    18. i = 24
    19. Maps = "BCDFGHJKMPQRTVWXY2346789"
    20. Do
    21. Current= 0
    22. j = 14
    23. Do
    24. Current = Current* 256
    25. Current = Key(j + KeyOffset) + Current
    26. Key(j + KeyOffset) = (Current \ 24)
    27. Current=Current Mod 24
    28. j = j -1
    29. Loop While j >= 0
    30. i = i -1
    31. KeyOutput = Mid(Maps,Current+ 1, 1) & KeyOutput
    32. Last = Current
    33. Loop While i >= 0
    34. keypart1 = Mid(KeyOutput, 2, Last)
    35. insert = "N"
    36. KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
    37. If Last = 0 Then KeyOutput = insert & KeyOutput
    38. ConvertToKey = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & _
    39. "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & _
    40. Mid(KeyOutput, 21, 5)
    41. End Function

    Liege ich da richtig ??
    :D Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton) :D

    MFG Jörg ;)

    Muss jeder vermeintliche Programmierer ne Signatur haben ??

    Th3RaZe schrieb:

    übersetzen
    Jou.
    Dim Key As String = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" - In diesem String kommt keine Ziffer vor. Key.Length = 50, also greift Key(66) daneben.
    Da sind wir noch lange nicht bei
    x \ 6 - Integerdivision und
    y & 1 - eineer Bit-Operation.
    Wie Du siehst, ist diese Herangehensweise Schrott, was uns nahelegt, Dein Konzept völlig in Frage zu stellen.
    -----
    Kannst Du sieses Script debuggen?
    Haltepunkte reinsetzen, Variablen auslesen?
    Ggf. den Inhalt von Variablen verfolgbar ausgeben?
    Dann sieh Dir an, was in Key(66) drinne steht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Da ich noch lernen Tue kann es leider möglich sein das meine Herangehnsweise Schrott ist, deswegen bin ich hier im Forum um Hilfestellungen zu bekommen und nebenbei in dem Praktikum hier viel zu lernen

    Vollzitate entfernt. ~Thunderbolt

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

    @RodFromGermany

    Du liegst ziemlich daneben. Hast du dir den Code überhaupt angeschaut?

    @Th3RaZe Willkommen im Forum. Ich entschuldige mich mal für diese eher bescheidene Begrüßung von meinen Vorrednern.

    Grundsätzlich ist VBS nach VB.NET nicht schwer, allerdings würde man in VB.NET ggf. komplett anders herangehen. Ich möchte da jetzt aber nicht näher drauf eingehen, sondern eher auf deine Frage.

    Das Problem liegt hier:

    Visual Basic-Quellcode

    1. DigitalID = WshShell.RegRead(key & "DigitalProductId")
    2. ProductKey = ConvertToKey(DigitalID)
    3. Function ConvertToKey(Key)
    4. Const KeyOffset = 52
    5. isWin8 = (Key(66) \ 6) And 1
    6. Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)
    7. '..
    8. End Function


    Das was du als DigitalID zurückbekommst ist ein Reg_Binary, also in VBS ein VBArray von Integern. Wie liesst du die Registry denn in VB.NET aktuell aus? Der Typ und Wert von DigitalID ist entscheidend.

    LG

    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Mono“ ()

    aktuell lese ich es so aus:

    VB.NET-Quellcode

    1. Dim strComputer As String
    2. Dim Key As String = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" & REG_VALUE
    3. Dim DigitalID As String = Key
    4. Dim ProductKey As String = ConvertToKey(DigitalID)


    Danke für die Hilfe :) ich hab noch ein bisschen Probleme mit den Funktionen im Forum hier.

    Vollzitat entfernt. ~Thunderbolt

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

    Nur zur Info:

    Die Variable Key der Function ist nicht die Variable Key des Hauptprogramms.

    Quellcode

    1. ...
    2. Key = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
    3. DigitalID = WshShell.RegRead(key & "DigitalProductId")
    4. ProductKey = ConvertToKey(DigitalID)
    5. ...
    6. Function ConvertToKey(Key)
    7. Const KeyOffset = 52
    8. isWin8 = (Key(66) \ 6) And 1

    ...

    Mono schrieb:

    angeschaut
    Diesen Part habe ich sogar ausprobiert:

    VB.NET-Quellcode

    1. Dim Key As String = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
    2. MessageBox.Show(Key(66).ToString)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Das ist aber nicht der Key der im Script verwendet wird. Siehe mein Codeausschnitt.
    //EDIT:
    Du hast doch schon soviel Code gesehen in deinem Leben, und kannst 2 verschiedene Scopes nicht erkennen? Brauchst einen Kaffee?^^

    @Th3RaZe

    Da ist der Fehler. Im Script wird ein Reg_Binary aus der Registry ausgelesen:

    Visual Basic-Quellcode

    1. DigitalID = WshShell.RegRead(key & "DigitalProductId")
    2. ProductKey = ConvertToKey(DigitalID)


    Du musst also schauen, wie du WshShell.RegRead(key & "DigitalProductId") in VB.NET umsetzt. Suche also nach Registry Schlüssel auslesen VB.NET.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!