Autostart Eintrag via Registry

    • VB.NET

    Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von shutdown.

      Autostart Eintrag via Registry

      Sehr geehrte User,

      Ich will euch mal zeigen wie ihr ganz einfach euer Programm in die Windows Autostart Registry laden könnt.

      Hier der Source Code:

      VB.NET-Quellcode

      1. Public Shared Sub AddToAutorun()
      2. Dim key As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Run")
      3. key.SetValue(My.Application.Info.ProductName, """" & System.Reflection.Assembly.GetEntryAssembly.Location & """")
      4. End Sub

      Ihr müsst jetzt den Code nur noch ein bisschen anpassen und schon fertig.
      Kann bei manchen Programmen sehr nützlich sein.

      Ich hoffe, dass ich damit vielen Leuten langes Suchen ersparen konnte und wünsche allen weiterhin viel Spass beim Programmieren.

      Beste Grüsse,
      TecksazZ
      Es gibt aber noch andere Orte in der Registry, wo man Autostarts eintragen kann:

      VB.NET-Quellcode

      1. Dim key As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\RunOnce")
      2. Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.Users.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run")
      3. Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.Users.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\RunOnce")
      4. Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.Users.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\RunOnceEx") 'Den gibt es unter Vista nicht
      5. Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.Users.OpenSubKey(".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run")


      Die ersten beiden sind für den aktuellen Benutzer, die drei weiteren für alle und der letzte für den Standartbenutzer (Für die letzten 4 braucht man unter Vista Adminrechte).

      Außerdem kann man noch Verknüpfungen des eigenen Programms in die Autostartordner packen. Diese sind:

      VB.NET-Quellcode

      1. Environment.GetFolderPath(Environment.SpecialFolder.Startup) 'Das ist der für den aktuellen Benutzer
      2. 'Unter XP: C:\Dokumente und Einstellungen\[Benutzername]\Lokale Einstellungen\Microsoft\Windows\Startmenü\Programme\Autostart
      3. 'Unter Vista: C:\Users\Thomas\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
      4. 'Alle Benutzer:
      5. 'XP:
      6. C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\Autostart\
      7. 'Vista:
      8. C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup


      Dann muss man nur noch eine Verknüpfung erstellen:

      1. In den Projekteigenschaften unter Verweise das "Windows Script Host Model Object" (ist unter COM) hinzufügen.

      2. Dann folgenden Code ausführen:

      VB.NET-Quellcode

      1. dim PfadUndNameDerNeuenVerknüpfung as string 'Hier den Pfad (siehe oben) und den Namen der Verknüpfung speichern (MIT Endung *.lnk)
      2. dim PfadUndNameDesProgramms as string 'Hier Pfad und Name des Programms
      3. dim WorkingDirectory as string 'In diesem Ordner soll das Programm dann ausgeführt werden
      4. Dim wsh As IWshRuntimeLibrary.IWshShell = New IWshRuntimeLibrary.WshShellClass()
      5. Dim ShortCut As IWshRuntimeLibrary.IWshShortcut = DirectCast(wsh.CreateShortcut(PfadUndNameDerNeuenVerknüpfung), IWshRuntimeLibrary.IWshShortcut)
      6. With ShortCut
      7. .WindowStyle = 1
      8. .TargetPath = PfadUndNameDesProgramms
      9. .WorkingDirectory = WorkingDirectory
      10. .Save()
      11. End With


      @TecksazZ Dein Code ist falsch. So erstellst du den SChlüssel HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Run. Er ist aber schon vorhanden. Richtig wäre

      VB.NET-Quellcode

      1. Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run")
      oder

      VB.NET-Quellcode

      1. My.Computer.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run")


      lg

      VB.NET-Quellcode

      1. Public Function Autostart(ByVal AutostartEnable As Boolean)
      2. Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
      3. If AutostartEnable = True Then
      4. key.SetValue(My.Application.Info.AssemblyName, System.Reflection.Assembly.GetEntryAssembly.Location)
      5. Else
      6. key.DeleteValue(My.Application.Info.AssemblyName, False)
      7. End If
      8. key.Close()
      9. Return AutostartEnable
      10. End Function

      True -> Autostart
      False -> Kein Autostart
      Beispiel.

      VB.NET-Quellcode

      1. Imports Microsoft.Win32
      2. Public Class Form1
      3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      4. Dim regkey As RegistryKey = Nothing
      5. Dim value As Object = Nothing
      6. regkey = Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run")
      7. value = regkey.GetValue("Test", "Key existiert nicht")
      8. End Sub
      9. End Class


      Und dann einfach überprüfen ob der Text "Key existiert nicht" drin steht
      danke, der code von singu funktioniert.
      habe es auch mit

      VB.NET-Quellcode

      1. Dim AppOrdner As String = Application.StartupPath
      2. Dim AppPfad As String = Application.ExecutablePath
      3. Dim AppExe As String = AppPfad.Replace(AppOrdner, "")
      4. If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", Test", AppOrdner & AppExe) IsNot Nothing Then
      5. Return True
      6. Else
      7. Return False
      8. End If

      probiert, gibt aber immer true aus :huh:
      Dankeschön. Werde ich wohl schon bald gebrauchen können. :rolleyes:

      Mal eine allgemeinere Frage: Gibt es einen Unterschied, wenn ich in die Registry eintrage oder wenn ich einfach in Environment.SpecialFolder.Stratup eintrage, außer dass es in der Registry schwerer gefunden wird?
      Dankeschön. Werde ich wohl schon bald gebrauchen können. :rolleyes:

      Mal eine allgemeinere Frage: Gibt es einen Unterschied, wenn ich in die Registry eintrage oder wenn ich einfach in Environment.SpecialFolder.Stratup eintrage, außer dass es in der Registry schwerer gefunden wird?

      ja, environment.specialfolder.startup ist der autostart ordner...

      Gruß, Gugi :thumbup:
      Und was soll bitte der große unterschied sein außer das es im autostartordner leichter ersichtlich ist^^

      im autostart ordner kann man leichter den autostarteintrag löschen^^. Ich glaube wenn es in der registry gespeichert ist startet er es früher als beim autostartordner?

      Gruß, Gugi :thumbup: