Programm automatisch ausführen
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von BlueSoftware.
-
-
Du machst ne Abfrage rein und dann setzt du entsprechend Keys in der Registry.
Grüße"Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero
Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt! -
@Nikx du würdest also mit der Registry arbeiten? Weisst du da gerade zufällig welche Keys oder kannst mir ein Stichwort nennen?
Ich habe es mal mit der Aufgabenplanung versucht, das ist eine einzige Katastrophe.. Und unendlich viel Code..
EDIT: Keys gefunden, aber funktionieren nicht:
funktioniert irgendwie nicht...Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „0luca0“ ()
-
-
-
0luca0 schrieb:
Mit diesem Schlüssel funktioniert das auch nicht. (HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run)
Fakiz schrieb:
Richtig wäre die Methode CreateSubKey().
Wenn man ein Autostart-Programm in die Registrierungsdatenbank eintragen will, muss man aber SetValue verwenden, weil alle Programme im bestehenden Schlüssel "Run" aufgelistet sind."Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford -
Damit läuft es nicht richtig.. Er gibt mir als Wert "C:\ProgramData\" aus anstatt "C:\ProgramData\pinger.exe" Hat jemand ne ahnung wieso? -
Wie lässt Du es Dir den ausgeben?
Das "IO.Directory.GetDirectoryRoot" brauchst Du doch gar nicht:
"Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford -
Ich nutze für sowas mal folgendes:
VB.NET-Quellcode
- Friend Reg As Microsoft.Win32.RegistryKey
- Public Property AutoStart() As Boolean
- Get
- Reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
- Dim O = Reg.GetValue(My.Application.Info.ProductName, "")
- If O Is Nothing OrElse O.ToString.Length = 0 OrElse O.ToString <> Application.ExecutablePath Then
- Return False
- Else
- Return True
- End If
- End Get
- Set(ByVal value As Boolean)
- If value = True Then
- Reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
- Reg.SetValue(My.Application.Info.ProductName, Application.ExecutablePath)
- Else
- Reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
- Reg.SetValue(My.Application.Info.ProductName, "")
- End If
- End Set
- End Property
Dann kannst mit
drauf zugreifen... Und mit
den Wert setzen.
Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
... Nun solltest es selber wissen. :'DDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MemoAnMichSelbst“ ()
-
@MemoAnMichSelbst - Das funktioniert aber nur, wenn die Anwendung keine höheren Rechte wie "requireAdministrator" oder "highestAvailable" benötigt."Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
-
Das stimmt.
Wobei ich die Art es über ne Property zu steuern ganz angenehm finde.
Ob man die im Bedarfsfall anpasst, darüber lässt sich streiten.
EDIT:
Könnt man nicht auch einfach in die Windows Autostrart ne Verknüpfung schmeißen und gut ist?
Also so ohne Registrierung?
EDIT2:
Über den Autostart-Ornder würde es dann so funktionieren:
Spoiler anzeigen Den Verweis hinzufügen:
Für den Aufruf dann auch über die Property folgenden Code hinterlegen:
VB.NET-Quellcode
- Public Function CreateShortcut(ByVal sLinkFile As String, _
- ByVal sTargetFile As String, _
- Optional ByVal sArguments As String = "", _
- Optional ByVal sDescription As String = "", _
- Optional ByVal sWorkingDir As String = "") As Boolean
- Try
- Dim oShell As New Shell32.Shell
- Dim oFolder As Shell32.Folder
- Dim oLink As Shell32.ShellLinkObject
- ' Ordner und Dateinamen extrahieren
- Dim sPath As String = sLinkFile.Substring(0, sLinkFile.LastIndexOf("\"))
- Dim sFile As String = sLinkFile.Substring(sLinkFile.LastIndexOf("\") + 1)
- ' Wichtig! Link-Datei erstellen (0 Bytes)
- Dim F = FreeFile()
- FileOpen(F, sLinkFile, OpenMode.Output)
- FileClose(F)
- oFolder = oShell.NameSpace(sPath)
- oLink = DirectCast(oFolder.Items.Item(sFile).GetLink, Shell32.ShellLinkObject)
- ' Eigenschaften der Verknüpfung
- With oLink
- If sArguments.Length > 0 Then .Arguments = sArguments
- If sDescription.Length > 0 Then .Description = sDescription
- If sWorkingDir.Length > 0 Then .WorkingDirectory = sWorkingDir
- .Path = sTargetFile
- ' Verknüpfung speichern
- .Save()
- End With
- ' Objekte zerstören
- oLink = Nothing
- oFolder = Nothing
- oShell = Nothing
- Return True
- Catch ex As Exception
- ' Fehler! ggf. Link-Datei löschen, falls bereit erstellt
- If System.IO.File.Exists(sLinkFile) Then Kill(sLinkFile)
- Return False
- End Try
- End Function
- Public Property AutoStart() As Boolean
- Get
- Dim fi As New System.IO.FileInfo(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), My.Application.Info.ProductName & ".lnk"))
- Return fi.Exists
- End Get
- Set(ByVal value As Boolean)
- If value = True Then
- CreateShortcut(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), My.Application.Info.ProductName & ".lnk"),
- Application.ExecutablePath)
- Else
- Dim fi As New System.IO.FileInfo(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), My.Application.Info.ProductName & ".lnk"))
- If fi.Exists Then fi.Delete()
- End If
- End Set
- End Property
Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
... Nun solltest es selber wissen. :'DDieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MemoAnMichSelbst“ ()
-
habe mal dei Registry analysiert und ein paar weitere Einträge in anderen Zweigen gefunden.. anscheinend wurden sie an ein paar andere Orte automatisch dupliziert. Alles entfernt und den Code nochmals ausgeführt und alles hat geklappt.
Zur Frage wieso ich benutze: Das Programm verschiebt sich und wird dann neugestartet unter diesem Pfad. :
Ich danke euch! Gemeinsam zu Lösung -
-
Ähnliche Themen
-
Kann man wirklich alle Prozesse beenden?
xKekskiller - - Sonstige Problemstellungen
-
6 Benutzer haben hier geschrieben
- 0luca0 (4)
- Vultrax (3)
- Nikx (2)
- MemoAnMichSelbst (2)
- Fakiz (1)
- Gast (1)