kurz und knapp kennt jemand die Registry Pfade von Origin und Uplay?

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

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von NoIde.

    kurz und knapp kennt jemand die Registry Pfade von Origin und Uplay?

    Hallo,

    ich suche den Pfad nach Origin.exe sowie nach uplay.exe.
    Da ich diese mit dem Programm öffnen möchte.
    Steam und andere Anwendungen stellen hier kein Problem dar.
    Bei Origin und Uplay finde ich nur den Schlüssel (Standard) mit dem Pfad zur Anwendung als Inhalt, jedoch kann ich den Schlüssel (Standard) nicht mit VB öffnen.
    Bei Steam findet man einen Schlüssel SteamExe der den Pfad zur Exe angibt. Das Klappt Super, ebenso mit vielen anderen Anwendungen. Aber Origin und Uplay stellen sich quer. Kennt da jemand eine Lösung für?

    Mein kleiner Beispiel Code Uplay und Origin hab ich ausgeklammert, da die Pfade nicht Aufgerufen werden können

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Microsoft.Win32
    3. Public Class Game_Manager
    4. Private Sub Game_Manager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. FormBorderStyle = FormBorderStyle.None
    6. rekSteamPath = Registry.CurrentUser.OpenSubKey("Software\Valve\Steam")
    7. 'rekOriginPath = Registry.LocalMachine.OpenSubKey("SOFTWARE\Classes\origin\shell\open\command")
    8. 'rekOriginPath = Registry.LocalMachine.OpenSubKey("SOFTWARE\Classes\eadm\shell\open\command")
    9. 'rekUplayPath = Registry.ClassesRoot.OpenSubKey("uplay\Shell\Open\Command")
    10. End Sub
    11. Dim rekSteamPath As RegistryKey
    12. Dim rekOriginPath As RegistryKey
    13. Dim rekUplayPath As RegistryKey
    14. Dim strSteamKey As String
    15. Dim strOriginKey As String
    16. Dim strUplayKey As String
    17. Private Sub Steambtn_Click(sender As Object, e As EventArgs) Handles Steambtn.Click
    18. strSteamKey = CType(rekSteamPath.GetValue("SteamExe", "0"), String)
    19. Process.Start(strSteamKey)
    20. End Sub
    21. Private Sub Originbtn_Click(sender As Object, e As EventArgs) Handles Originbtn.Click
    22. 'strOriginKey = CType(rekOriginPath.GetValue("(Standard)", "%1"), String)
    23. 'Process.Start(strOriginKey)
    24. MessageBox.Show("Noch keine Registry Daten gefunden.")
    25. End Sub
    26. Private Sub Uplaybtn_Click(sender As Object, e As EventArgs) Handles Uplaybtn.Click
    27. 'strUplayKey = CType(rekUplayPath.GetValue("Standard", "0"), String)
    28. 'Process.Start(strUplayKey)
    29. MessageBox.Show("Noch keine Registry Daten gefunden.")
    30. End Sub
    31. Private Sub Btnclose_Click(sender As Object, e As EventArgs) Handles Btnclose.Click
    32. Me.Close()
    33. End Sub
    34. End Class

    Andy2002 schrieb:

    jedoch kann ich den Schlüssel (Standard) nicht mit VB öffnen.


    Nicht? Doch, das geht :D .

    Brauchst bei RegistryKey.GetValue als argument "" oder String.Empty oder Nothing, um an "Default" zu kommen.

    VB.NET-Quellcode

    1. rekUplayPath = Registry.ClassesRoot.OpenSubKey("uplay\Shell\Open\Command")
    2. MessageBox.Show(rekUplayPath.GetValue("").ToString())
    3. MessageBox.Show(rekUplayPath.GetValue(String.Empty).ToString())
    4. MessageBox.Show(rekUplayPath.GetValue(Nothing).ToString())
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Grummel.. Ja Nothing bzw "" ist ja Default.
    Naja war so eine 10 Minuten Idee. :)

    Edit: Jetzt bräuchte ich noch Funktionierende Pfade zu Origin und zu Uplay. Die die ich gefunden habe Starten nicht.. Keine Ahnung wieso..

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

    Also der Wert des Schlüssels bei Standart-Installation ist:
    "C:\Program Files (x86)\Ubisoft\Ubisoft Game Launcher\upc.exe" "%1"
    um daraus jetzt nur den Pfad in den "zu bekommen, hast du mehrere möglichkeiten.

    Z.B. einfache String-Funktionen wie:

    String.Split
    String.Replace
    String.Substring (auch in kombination mit String.LastIndexOf oder String.IndexOf)

    Am einfachsten ist glaub ich, du splittest den String bei ". Im daraus resultierenden String-Array hast du dann im Index 1 den reinen Pfad.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

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

    Warum macht Ubisoft das so Kompliziert. Steam und Origin habe ich gefunden, und es Funktioniert bei denen Wunderbar. Bei Ubisoft bekomme ich nur den Ordner auf.
    Hab mir das so gedacht das ich nun durch die InstallDir (Installations Ordner Pfad von Uplay) mittels Parameter Uplay.exe diese aufrufe.. Aber das klappt wohl so nicht. Egal ob mit "-" oder "+" oder "" vor Uplay.exe es wird nur der Ordner geöffnet.

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Microsoft.Win32
    3. Public Class Game_Manager
    4. Private Sub Game_Manager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. FormBorderStyle = FormBorderStyle.None
    6. rekSteamPath = Registry.CurrentUser.OpenSubKey("Software\Valve\Steam")
    7. rekOriginPath = Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\Origin")
    8. rekUplayPath = Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\Ubisoft\Launcher")
    9. Label2.Visible = False
    10. End Sub
    11. Dim rekSteamPath As RegistryKey
    12. Dim rekOriginPath As RegistryKey
    13. Dim rekUplayPath As RegistryKey
    14. Dim strSteamKey As String
    15. Dim strOriginKey As String
    16. Dim strUplayKey As String
    17. Private Sub Steambtn_Click(sender As Object, e As EventArgs) Handles Steambtn.Click
    18. strSteamKey = (rekSteamPath.GetValue("SteamExe", "0").ToString())
    19. Cursor = Cursors.WaitCursor
    20. Process.Start(strSteamKey)
    21. Label2.Visible = True
    22. Label2.Text = ("Steam wird gestartet")
    23. End Sub
    24. Private Sub Originbtn_Click(sender As Object, e As EventArgs) Handles Originbtn.Click
    25. strOriginKey = (rekOriginPath.GetValue("ClientPath", "0").ToString())
    26. Process.Start(strOriginKey)
    27. Cursor = Cursors.WaitCursor
    28. Label2.Visible = True
    29. Label2.Text = ("Origin wird gestartet")
    30. End Sub
    31. Private Sub Uplaybtn_Click(sender As Object, e As EventArgs) Handles Uplaybtn.Click
    32. strUplayKey = (rekUplayPath.GetValue("InstallDir", "+Uplay.exe").ToString())
    33. Cursor = Cursors.WaitCursor
    34. Process.Start(strUplayKey)
    35. Label2.Visible = True
    36. Label2.Text = ("Noch muss die Uplay.exe Selber Angeklickt werden")
    37. End Sub
    38. Private Sub Btnclose_Click(sender As Object, e As EventArgs) Handles Btnclose.Click
    39. Me.Close()
    40. End Sub
    41. End Class
    Das liegt daran das der Pfad zu diesem Ordner führt, nicht zur Anwendung, welche wohl in dem Ordner ist.

    Eigendlich hast du es doch schon fast fertig.

    VB.NET-Quellcode

    1. dim rekUplayPath as registrykey = Registry.ClassesRoot.OpenSubKey("uplay\Shell\Open\Command")
    2. Dim keyvalue as String = rekUplayPath.GetValue("").ToString()
    3. Dim splits() as string = keyvalue.Split(__hierfehlt das argument__) ' <-Argument noch rein in die Klammern
    4. Process.Start(splits(1))

    Was du an diesem Code nur noch machen musst, das Argument für die Split-Funktion finden(Zeile 3), bei welchen Zeichen ich splitten täte habe ich dir bereits empfohlen. Wenn du das machst wie ich meinte, startet Uplay. Natürlich solltest du damit dein Programm nicht abstürzt, testen ob der Key nicht Nothing ist. Wenn uplay nicht installiert ist, bzw. der Key warum auch immer nicht da sein sollte, stürzt dein programm beim Clicksen von Uplaybtn ab. verhält sich auch so mit den anderen.

    @Andy2002
    Habe noch eine wichtige Sache rein editiert.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „NoIde“ ()

    Fast :thumbsup: . Na gut, du hast es probiert, warst jetzt nahe dran. Wenn hier String.Replace zum Einsatz gekommen wäre, hättest du das ersetzen können(mit einem leeren String). Um ein " innerhalb eines String zu schreiben, schreiben wir 2x" .
    Das kleine c hinten dran macht ein Char aus dem String.

    docs.microsoft.com/de-de/dotne…lit?view=netframework-4.8

    VB.NET-Quellcode

    1. Private Sub Uplaybtn_Click(sender As Object, e As EventArgs) Handles Uplaybtn.Click
    2. Dim rekUplayPath As RegistryKey = Registry.ClassesRoot.OpenSubKey("uplay\Shell\Open\Command")
    3. If rekUplayPath Is Nothing Then
    4. Return 'die sub wird hier verlassen, wegen des return, natürlich nur wenn der Key Nothing ist
    5. End If
    6. Dim keyvalue As String = rekUplayPath.GetValue("").ToString()
    7. Dim splits() As String = keyvalue.Split(""""c)
    8. For i = 0 To splits.Length - 1
    9. MessageBox.Show(splits(i))
    10. Next
    11. Process.Start(splits(1))
    12. End Sub


    Danach ist splits(0) ein leerer String
    splits(1) was du haben willst, denn rest schau dir einfach mal an. Dann stellt du fest das nun einzelne teile des Strings im Array sind, aber keine " mehr, an den stellen wo ein " war, wurde sozusagen zerschnitten.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „NoIde“ ()