Autostarteinträge auslesen (Systemstartelement, Befehl)

  • VB.NET

Es gibt 57 Antworten in diesem Thema. Der letzte Beitrag () ist von der_Kurt.

    Autostarteinträge auslesen (Systemstartelement, Befehl)

    Hallo,

    ich möchte mir gerne diverse Informationen aus dem Autostart auslesen lassen. Die Einträge habe ich schon aus der Registry ausgelesen.

    VB.NET-Quellcode

    1. Dim lm As Microsoft.Win32.RegistryKey
    2. Dim cu As Microsoft.Win32.RegistryKey
    3. lm = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", _
    4. RegistryKeyPermissionCheck.Default, Security.AccessControl.RegistryRights.FullControl)
    5. cu = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", _
    6. RegistryKeyPermissionCheck.Default, Security.AccessControl.RegistryRights.FullControl)
    7. For Each Wert As String In lm.GetValueNames
    8. ListBox1.Items.Add(Wert)
    9. NextFor Each Wert As String In cu.GetValueNames
    10. ListBox1.Items.Add(Wert)Next

    Die Importsverweise sind natürlich auch gesetzt:

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Imports Microsoft.Win32.Registry



    Die benötigten Informationen werden auch ausgelesen, aber wenn man mal per Msconfig guckt, sieht man dort noch die Spalte "Systemstartelement" und "Befehl". Meine Frage ist daher, ob man diese Informationen auch ausgelesen bekommt. Gesucht habe ich, allerdings nichts gefunden.
    Über Hilfe würde ich mich freuen.
    MfG Onion
    Hallo Onion,

    Also,die Programmbezeichnung (Systemstart-Element) ist in der .exe Ziel Datei geschrieben. (Rechtsklick auf Datei & Eigenschaften)
    Du suchst dir hierfür einfach den Pfad zur Anwendung aus der Regestrierung und..

    Jetz müsstest du nur noch wissen, wie man die Programm Beschreibung ausliest :D

    Und der Befehl ist einfach Praktisch der Wert des Schlüssels.
    Mein Beispiel:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\RtHDVCpl (Realtek Audio Treiber)
    hat den Wert:
    C:\Program Files\Realtek\Audio\HDA\RAVCpl64.exe -s

    Also den Pfad zu der Ziel-Datei

    Gruß,
    Paulmaster
    Hi,

    danke erstmal für deine Antwort. Ich habe mal per regedit geguckt, welche Schlüssel ich denn da so habe. Normalerweise müsste Kaspersky drin sein, ist es aber nicht. Somit habe ich den Wert auch nicht. Per Msconfig steht dort aber der Befehl. Das Gleiche gilt dann für die Beschreibung.

    Da dieser Schlüssel nicht vorhanden ist, kann ich ihn auch nicht auslesen.

    Edit by der_Kurt: Fullquote entfernt

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

    Abend nochmal :D

    Also, den Ort, wo sich der Schlüssel befindet, kannst du ganz einfach in der msconfig.exe unter dem "Reiter" Systemstart und dann in der Spalte "Ort" erkennen.

    HKLM ist übrigens die Abkürzung für:
    HKEY_LOCAL_MACHINE
    und
    HKCU steht für:
    HKEY_CURRENT_USER

    Gruß,
    Paulmaster

    P.s. Das mit dem:
    Normalerweise müsste Kaspersky drin sein, ist es aber nicht.

    Liegt eben daran, dass die Schlüssel unter Verschieden Orten angelegt werden

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

    Ah, jo. Hatte das mit dem Ort übersehen. Dort finde ich den Schlüssel, allerdings weiß ich nicht wie ich ALLE Schlüssel so auslesen kann, wie ich es gerne hätte, das sie immer woanders sind. Das kommt mir irgendwie sehr schwer vor, wobei das andere Programme können. Diese ganzen Tuningprogramme lesen das alles problemlos aus.

    Wofür HKLM und HKCU steht weiß ich. 8-)

    Edit by der_Kurt: Fullquote entfernt

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

    Du brauchst doch einfach nur mit einer For-Each Schleife die verschiedenen Orte "abklappern"
    Das wären dann:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    und
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    Andere Speicherorte sind mir nicht bekannt :D

    VB.NET-Quellcode

    1. Dim Key As Microsoft.Win32.RegistryKey
    2. Key= Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
    3. For Each Schlüssel As String In Key.GetValueNames
    4. ListBox1.Items.Add(Schlüssel)
    5. Next
    6. Key= Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
    7. For Each Schlüssel As String In Key.GetValueNames
    8. ListBox1.Items.Add(Schlüssel)
    9. Next


    Gruß,
    Paulmaster
    Achso ja, klingt logisch. :D

    Ich habe jetzt schon den "Befehl" ausgelesen, allerdings bin ich damit nicht zufrieden. Ich musste den Schlüssel vorher definieren, aber nicht jeder hat die gleichen Schlüssel in seiner Registry Bzw, im Autostart.

    Ich brauche also 2 Sachen.

    - Den Befehl um allgemein die "Befehle" der gewünschten Schlüssel auszulesen (die Schleife?)

    - Den Befehl um von dort aus das Systemstartelement ausgelesen zu bekommen

    Danke dir.

    Edit by der_Kurt: Fullquote entfernt

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

    Ich verstehe jetzt ehrlich gesagt nicht, was du noch brauchst Onion.. ?(

    Ja, klar, du musst die Werte definieren, aber wiegegeschrieben, es sind keine mir bekannten anderen Speicherorte für diese “Werte“ bekannt. Das heißt, wen du beide Orte mit der Schleife durchsuchst, müsstest du eigentlich alle Autostartprogramme finden. Bastle dir daraus nen schönen Sub und binde diese dan in dein Programm ein..

    Übrigens:
    Es gibt einen Autostartordner, der mit weiteren Programmen bestückt worden sein kann:
    C:\Users\Benutzername\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    Aber eher unwahrscheinlich, das da irgendwelche Programme drinnen sind..

    Gruß,
    Paulmaster
    Ich habe den Eintrag für Kaspersky gefunden, dieser besitzt einen Wert, der den "Befehl" darstellt. Diesen kann ich mit folgendem befehl auslesen:

    VB.NET-Quellcode

    1. schlüsselwert = Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run", "AVP", Nothing)


    Aber das ist ja sozusagen nur ein "Unterordner" von "Run". Was soll ich als Ziel denn reinschreiben, damit er ALLE Werte von allen Einträgen raussucht? Wenn ich anstatt "AVP" nichts reinschreibe, sucht es mir auch nichts raus.
    Den Befehl habe ich ja, nur kann ich das nicht allgemein hinschreiben, sondern es braucht immer einen vordefinierten Schlüssel aber nicht jede Person besitzt Kaspersky, sondern vieleicht ein anderes Programm. Ich kann ja nicht hellsehen.

    Der Autostartordner ist mir bekannt, da befindet sich bei mir nichts drin.

    Edit by der_Kurt: Fullquote entfernt

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

    Hi,

    danke dir. Allerdings hat das einen Schönheitsfehler. Es gibt nicht alle Einträge aus, sondern nur einen.

    Edit by der_Kurt: Fullquote entfernt

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

    Abend nochmal Onion,

    Dann ändere doch einfach den Code so ab, das er funktioniert :D

    VB.NET-Quellcode

    1. Private Sub GetAllStartUpCommands()
    2. Dim strComputer As String = "."
    3. Dim objWMIService As Object = GetObject("winmgmts:" _
    4. & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    5. Dim colStartupCommands As Object = objWMIService.ExecQuery _
    6. ("Select * from Win32_StartupCommand")
    7. For Each objStartupCommand As Object In colStartupCommands
    8. ListBox1.Items.Add("Command: " & objStartupCommand.Command & "Description: " & _
    9. objStartupCommand.Description & "Location: " & objStartupCommand.Location & "Name: " & _
    10. objStartupCommand.Name & "Setting ID: " & objStartupCommand.SettingID & "User: " & objStartupCommand.User)
    11. Next
    12. End Sub


    Aber irgenwie habe ich das Gefühl, das nicht alle Autostarteinträge angezeigt werden :huh:
    5 Stück, da waren doch mehr..

    Gruß,
    Paulmaster
    Hi,

    also das funkioniert teilweise. Es zeigt mir nur die Sidebar.exe an, die sich bei mir garnicht in der Msconfig befindet. Auch zeigt es mir nicht das Systemstartelement an.

    Dafür aber alles andere. ?( Es scheint an der falschen Stelle zu suchen. Das ist echt eine komische Geschichte mit dem Autostart und VB.
    Ja,ja, hab das Gefühl, das könnt heute noch in den frühen Morgen reindauern..

    Schick uns doch mal ein Screenshot von deiner Msconfig.exe und dann eins von deiner gefüllten Listbox, dann kann man das Problem besser nachvollziehen :thumbsup:

    Gruß,
    Paulmaster
    Ich habe es nicht eilig, wenn das Problem sich etwas zieht ist das kein Problem. Kann auch bis morgen oder länger dauern.

    Also ich kann zwar Screens machen, aber da ist nichts besonderes. Ich habe recht viele Einträge dort aber nur Kaspersky ist aktiviert. Die anderen sind ALLE deaktiviert.
    Es befinden sich auch viele hier:
    SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

    Mit dem Code den ich im Anfangspost geschrieben habe werden mir die Programme ausgegeben, die auch aktiviert sind. Die anderen nicht.
    Mit dem Code von SystemUnknow Bzw. den geänderten Code wird mir die SIdebar.exe mit allen Informationen ausgegeben. Außer halt dem Systemstartelement.

    Edit by der_Kurt: Fullquote entfernt

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

    Also mit dem Code:

    VB.NET-Quellcode

    1. Dim Key As Microsoft.Win32.RegistryKey
    2. Key= Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
    3. For Each Schlüssel As String In Key.GetValueNames
    4. ListBox1.Items.Add(Schlüssel)
    5. Next
    6. Key= Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
    7. For Each Schlüssel As String In Key.GetValueNames
    8. ListBox1.Items.Add(Schlüssel)
    9. Next

    Zeigt er mir alle in der MsConfig als Aktiviert markierten Einträge an.

    Dar ich heute meinen "Sozialen" habe, werde ich mich jetzt dransetzen, und dir einen Funktionierenden Code Programmieren, der alle deine gewünschten Funktionen abdeckt..

    Also bitte Geduld :D

    Gruß,
    Paulmaster

    EDIT:
    Mit meiner Aussage "Es gibt keine weiteren Orte für die Autostartprogramme" lag ich kläglich daneben, es gibt noch:
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

    Edit by der_Kurt: Die Farbe Rot ist der Moderation vorbehalten. *Farbe angepasst*

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

    Der Code funktioniert eigentlich auch. Er zeigt mir alle markierten Einträge an. Nur halt nicht mehr als das. Da ich Kaspersky aktiv habe, zeigt es mir 2x "AVP" an. Da es wohl in beiden Schlüsseln vorkommt.

    Es wäre halt toll, wenn man noch den Namen (Systemstartelement) sehen könnte, was in dem Fall "Kaspersky Anti Virus" wäre. Zusätzlich halt noch wo die Datei liegt. (Befehl)

    Das du mir das programmieren möchtest Bzw. es versuchen möchtest ist echt nett. Ich hätte nämlich nicht gefragt ob mir jemand den ganzen Code vorkaut.

    Vielen Dank für die bisherige Hilfe und wenn du das aus welchen Gründen auch immer nicht hinbekommst ist das auch kein Problem. Nur es muss ja eine Lösung geben, da Msconfig es schafft und andere Programme auch.

    Grüße

    Edit: Jo, das mit dem 6432Node hatte ich ja geschrieben. Ist eine ganz komische Sache. :huh:

    Edit by der_Kurt: Fullquote entfernt

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

    Oha,

    Ich hab mich mal drangesetzt und dabei etwas schockierendes entdeckt:
    Es gibt noch mehr Orte in denen Autostarts definiert werden

    Hier eine Liste:

    //Lokal Machine
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce

    HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
    HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
    HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunServices
    HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunServicesOnce

    //Current User
    HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
    HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
    HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce

    HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
    HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
    HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunServices
    HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunServicesOnce

    //Lokale Ordner
    C:\Users\Benutzername\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

    Und manchmal auch hier:
    C:\WINDOWS\System32\GroupPolicy\User\Scripts\Logon
    C:\WINDOWS\System32\GroupPolicy\Machine\Scripts\Startup
    C:\WINDOWS\System.ini
    C:\WINDOWS\Win.ini
    C:\WINDOWS\Wininit.ini

    Und ich Wette, ich finde noch mehr..

    Wenn du ein Programm schreiben willst, was wirklich jedes Autostart Programm heraussuchen soll, musst du jeden dieser Orte durchgehen :thumbsup:

    Das wären dann schon einmal 22 For-Each Schleifen :pinch:

    Gruß,
    Paulmaster

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

    Allerdings fallen 8 Stück schonmal weg, weil es die Dienste sind. Dienste interessieren mich in dem Moment nicht. Sowas füge ich vieleicht später hinzu.

    Selbst wenn es 17 oder mehr Schleifen wären, ich mache mir des öfteren mal mehr Schreibarbeit. Liegt wohl auch daran, dass ich noch kein Profi bin.

    Das Wichtige ist halt erstmal, dass man überhaupt den richtigen Befehl findet. Der Rest ist ja nur Schreibarbeit.

    Trotzdem danke für die Info, mit so vielen Orten habe ich dann doch wieder nicht gerechnet. :S :D