Du bist nicht angemeldet.

TecksazZ

unregistriert

1

Donnerstag, 19. Februar 2009, 17:33

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:

Visual Basic Quellcode

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

Alteran

Registrierter Benutzer

  • »Alteran« ist männlich

Beiträge: 756

Dabei seit: 6. Juli 2008

Wohnort: Burgthann

Hilfreich-Bewertungen: 5

  • Private Nachricht senden

2

Donnerstag, 19. Februar 2009, 19:30

Es gibt aber noch andere Orte in der Registry, wo man Autostarts eintragen kann:

Visual Basic Quellcode

1
2
3
4
5
Dim key As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\RunOnce")
Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.Users.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run")
Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.Users.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\RunOnce")
Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.Users.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\RunOnceEx") 'Den gibt es unter Vista nicht
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:

Visual Basic Quellcode

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

'Alle Benutzer:
'XP:
C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\Autostart\
'Vista:
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:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
 dim PfadUndNameDerNeuenVerknüpfung as string 'Hier den Pfad (siehe oben) und den Namen der Verknüpfung speichern (MIT Endung *.lnk)
dim PfadUndNameDesProgramms as string 'Hier Pfad und Name des Programms
dim WorkingDirectory as string 'In diesem Ordner soll das Programm dann ausgeführt werden

   Dim wsh As IWshRuntimeLibrary.IWshShell = New IWshRuntimeLibrary.WshShellClass()
                        Dim ShortCut As IWshRuntimeLibrary.IWshShortcut = DirectCast(wsh.CreateShortcut(PfadUndNameDerNeuenVerknüpfung), IWshRuntimeLibrary.IWshShortcut)
                        With ShortCut
                            .WindowStyle = 1
                            .TargetPath = PfadUndNameDesProgramms 
                            .WorkingDirectory = WorkingDirectory 
                            .Save()
                        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

Visual Basic Quellcode

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

Visual Basic Quellcode

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


lg
Asus G71V 7S033C Gaming Notebook - 2 * 2,4 GHz - 4 GB DDR3 RAM - 240 GB Festplatte - 17" Bildschirm - 5 Lautsprecher - WebCam - Microphone - Super Design


COM 2000

Registrierter Benutzer

  • »COM 2000« ist männlich

Beiträge: 158

Dabei seit: 24. Februar 2009

Wohnort: Offenburg

Hilfreich-Bewertungen: 1

  • Private Nachricht senden

3

Freitag, 27. November 2009, 17:00

Würde vielleicht noch jemand den Code posten um den jeweiligen Autostarteintrag wieder zu entfernen ?

aspire

Registrierter Benutzer

Beiträge: 236

Dabei seit: 19. Januar 2009

  • Private Nachricht senden

4

Freitag, 27. November 2009, 19:46

Visual Basic Quellcode

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

True -> Autostart
False -> Kein Autostart
Mitglied von [NO C&P CODE]

pc-freack

PC Freack

  • »pc-freack« ist männlich

Beiträge: 539

Dabei seit: 23. August 2010

Wohnort: Rotenburg Wümme

Hilfreich-Bewertungen: 24

  • Private Nachricht senden

5

Samstag, 4. September 2010, 13:37

wie kann ich die via button abrufen
:thumbsup: MfG pc-freack :thumbsup:
Hat es geholfen? Dann bitte auf "Hilfreich" klicken

Aktuelles Projekt: SetupLib 1.3

gugi-zone.net

VB.NET & C# Programmierer

Beiträge: 1 506

Hilfreich-Bewertungen: 44

  • Private Nachricht senden

6

Samstag, 4. September 2010, 13:43

Visual Basic Quellcode

1
Autostart(true)


Gruß, Gugi :thumbup:

pc-freack

PC Freack

  • »pc-freack« ist männlich

Beiträge: 539

Dabei seit: 23. August 2010

Wohnort: Rotenburg Wümme

Hilfreich-Bewertungen: 24

  • Private Nachricht senden

7

Samstag, 4. September 2010, 14:12

und wenn ich das über einer checkbox machen möchte
:thumbsup: MfG pc-freack :thumbsup:
Hat es geholfen? Dann bitte auf "Hilfreich" klicken

Aktuelles Projekt: SetupLib 1.3

squisheemixxa

Referenztyp

  • »squisheemixxa« ist männlich

Beiträge: 197

Dabei seit: 18. August 2010

Wohnort: Österreich

Hilfreich-Bewertungen: 33

  • Private Nachricht senden

8

Samstag, 4. September 2010, 14:16

Bei Checkedchange autostart(checkbox.checked)
Lg ;)

pc-freack

PC Freack

  • »pc-freack« ist männlich

Beiträge: 539

Dabei seit: 23. August 2010

Wohnort: Rotenburg Wümme

Hilfreich-Bewertungen: 24

  • Private Nachricht senden

9

Samstag, 4. September 2010, 14:19

danke
:thumbsup: MfG pc-freack :thumbsup:
Hat es geholfen? Dann bitte auf "Hilfreich" klicken

Aktuelles Projekt: SetupLib 1.3

squisheemixxa

Referenztyp

  • »squisheemixxa« ist männlich

Beiträge: 197

Dabei seit: 18. August 2010

Wohnort: Österreich

Hilfreich-Bewertungen: 33

  • Private Nachricht senden

10

Samstag, 4. September 2010, 19:50

wie kann ich überprüfen ob der registry-eintrag schon existiert?

danke
Lg ;)

singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

11

Samstag, 4. September 2010, 20:03

Beispiel.

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Imports Microsoft.Win32

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim regkey As RegistryKey = Nothing
        Dim value As Object = Nothing

        regkey = Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run")

        value = regkey.GetValue("Test", "Key existiert nicht")

    End Sub
End Class


Und dann einfach überprüfen ob der Text "Key existiert nicht" drin steht
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


gugi-zone.net

VB.NET & C# Programmierer

Beiträge: 1 506

Hilfreich-Bewertungen: 44

  • Private Nachricht senden

12

Samstag, 4. September 2010, 20:07

[VB 2008] Registry key überprüfen

Gruß, Gugi :thumbup:

Edit:// Jetzt war ich wegen dem Googlen zu langsam :pinch:

squisheemixxa

Referenztyp

  • »squisheemixxa« ist männlich

Beiträge: 197

Dabei seit: 18. August 2010

Wohnort: Österreich

Hilfreich-Bewertungen: 33

  • Private Nachricht senden

13

Samstag, 4. September 2010, 20:41

danke, der code von singu funktioniert.
habe es auch mit

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
        Dim AppOrdner As String = Application.StartupPath
        Dim AppPfad As String = Application.ExecutablePath
        Dim AppExe As String = AppPfad.Replace(AppOrdner, "")

        If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", Test", AppOrdner & AppExe) IsNot Nothing Then
            Return True
        Else
            Return False
        End If

probiert, gibt aber immer true aus :huh:
Lg ;)

singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

14

Samstag, 4. September 2010, 21:28

Du gibst ja einen Default-Wert an, deshalb kann es nie Nothing sein
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


squisheemixxa

Referenztyp

  • »squisheemixxa« ist männlich

Beiträge: 197

Dabei seit: 18. August 2010

Wohnort: Österreich

Hilfreich-Bewertungen: 33

  • Private Nachricht senden

15

Samstag, 4. September 2010, 21:33

stimmt, nur in dem von Gugi verlinkten post wird es als funtionierend dargestellt ^^
Lg ;)

singu

Lib Dev

  • »singu« ist männlich

Beiträge: 5 853

Dabei seit: 6. Oktober 2008

Hilfreich-Bewertungen: 43

  • Private Nachricht senden

16

Samstag, 4. September 2010, 22:54

Weil es wird immer ein Wert geschrieben, weil der Default-Wert gleich dem neuen Wert ist
FTPLib 2.1.0.0 - Einfacher Zugriff auf FTP-Server ** TextEffectsLib - Schöne Effekte für TextBox und Label ** ExtendedListView


  • »croomeWare.de« ist männlich

Beiträge: 34

Dabei seit: 16. Juli 2010

Frühere Benutzernamen: croomeWare.de; Bread

Hilfreich-Bewertungen: 1

  • Private Nachricht senden

17

Montag, 6. September 2010, 12:20

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?
Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen.


Albert Einstein (1879 - 1955)

gugi-zone.net

VB.NET & C# Programmierer

Beiträge: 1 506

Hilfreich-Bewertungen: 44

  • Private Nachricht senden

18

Montag, 6. September 2010, 12:25

Zitat

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:

squisheemixxa

Referenztyp

  • »squisheemixxa« ist männlich

Beiträge: 197

Dabei seit: 18. August 2010

Wohnort: Österreich

Hilfreich-Bewertungen: 33

  • Private Nachricht senden

19

Montag, 6. September 2010, 14:19

Und was soll bitte der große unterschied sein außer das es im autostartordner leichter ersichtlich ist^^
Lg ;)

gugi-zone.net

VB.NET & C# Programmierer

Beiträge: 1 506

Hilfreich-Bewertungen: 44

  • Private Nachricht senden

20

Montag, 6. September 2010, 14:23

Zitat

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:

Ähnliche Themen

Social Bookmarks