Hinzufügen eines anderen Programms zum Start

Hinzufügen eines anderen Programms zum Start

Wie kann ich zum Starten ein völlig anderes Programm auf dem Computer hinzufügen? Wäre das so etwas?

My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True).SetValue(Application.ProductName, "C:\APPLICATIONSPATH.fileextension")

PS: Tut mir leid, dass ich ein Neuling bin.

Antwort1

Es gibt mehrere Möglichkeiten, ein Startprogramm hinzuzufügen.

Erstens: Welches Betriebssystem verwenden Sie? So wie es aussieht, eine Windows-Version?

Und welche Programmiersprache möchten Sie verwenden? C Sharp?

Vorausgesetzt, Sie haben Schreibrechte für die Registrierung, sieht das, was Sie geschrieben haben, größtenteils richtig aus. Haben Sie versucht, es zu testen? Es gibt auch einen RunOnce-Unterschlüssel, der es dem Programm erlaubt, nur beim nächsten Start ausgeführt zu werden. Ich habe das, was Sie versuchen, eigentlich schon einmal gemacht, aber im Moment arbeite ich an einem Computer mit eingeschränkten Rechten, sodass ich nicht überprüfen kann, ob das, was Sie geschrieben haben, vollkommen richtig ist. Obwohl die Idee gut sein sollte :)

Sie können auch eine Verknüpfung zum Ordner „Autostart“ im Windows-Startmenü erstellen. Sie könnten einen kurzen Code schreiben, um eine Verknüpfungsdatei für die Anwendung zu erstellen, die Sie ausführen möchten, und dann versuchen, die Verknüpfungsdatei in das richtige Startverzeichnis zu schreiben. Wenn Sie keine Verknüpfungsdatei haben, schreiben Sie eine Skriptdatei, was viel einfacher ist. Vielleicht etwas wie:

@echo off
echo Running a startup program!
pause 
::load program
start /b "" "C:\APPLICATIONSPATH.fileextension"

und schreiben Sie dies programmgesteuert in eine Datei mit der Erweiterung .vbs. Auf diese Weise kann ein Benutzer, der sich nicht mit Computern auskennt, das Startobjekt manuell entfernen und es leicht sehen. (Ich denke, dies könnte eine Möglichkeit sein, die ohne Administratorrechte funktioniert. Könnte eine nützliche Alternative zum Schreiben in die Registrierung sein?)

Wenn Sie Windows 8 verwenden, existiert dieser Startordner nicht mehr im Startmenü. Stattdessen finden Sie ihn hier: C:\Benutzer\IHRBENUTZER\AppData\Roaming\Microsoft\Windows\Startmenü\Programme\Startup

oder mit der Windows-Eingabeaufforderung „Ausführen“: Win+ R und durch Ausführenshell:startup

Bildbeschreibung hier eingeben

Schauen Sie hier nachWindows 8

Antwort2

Ich habe dieses Modul entwickelt, das das Hinzufügen oder Entfernen einer externen Anwendung zum Windows-Start über die Registrierungsmethode erleichtert.

Es deckt den Startbereich (Ausführen/Einmal ausführen), den Benutzerbereich (Aktueller Benutzer/Alle Benutzer), den Registrierungsbereich (x86/x64) ab und kann außerdem einen Bypass für die Windows-Anmeldung im „Sicheren Modus“ hinzufügen.

Ein Anwendungsbeispiel:

WinStartupUtil.Add(UserScope.CurrentUser, StartupScope.Run, RegistryScope.System32,
                   title:="Application Title",
                   filePath:="C:\Application.exe",
                   arguments:="/Arg1",
                   secureModeByPass:=True)

WinStartupUtil.Remove(UserScope.CurrentUser, StartupScope.Run, RegistryScope.System32,
                      title:="Application Title",
                      throwOnMissingValue:=True)

Der Quellcode:

' ***********************************************************************
' Author   : Elektro
' Modified : 12-October-2015
' ***********************************************************************
' <copyright file="WinStartupUtil.vb" company="Elektro Studios">
'     Copyright (c) Elektro Studios. All rights reserved.
' </copyright>
' ***********************************************************************

#Region " Option Statements "

Option Explicit On
Option Strict On
Option Infer Off

#End Region

#Region " Imports "

Imports System
Imports Microsoft.Win32

#End Region

#Region " WinStartup Util "

''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Adds or removes an application from Windows Startup.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
Public Module WinStartupUtil

#Region " Constants "

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' The 'Run' registry subkey path.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    Public Const RunSubKeyPath As String = "Software\Microsoft\Windows\CurrentVersion\Run"

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' The 'Run' registry subkey path for x86 appications on x64 operating system.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    Public Const RunSubKeyPathSysWow64 As String = "Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run"

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' The 'RunOnce' registry subkey path.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    Public Const RunOnceSubKeyPath As String = "Software\Microsoft\Windows\CurrentVersion\RunOnce"

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' The 'RunOnce' registry subkey path for x86 appications on x64 operating system.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    Public Const RunOnceSubKeyPathSysWow64 As String = "Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce"

#End Region

#Region " Enumerations "

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Specifies an user scope.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    Public Enum UserScope As Integer

        ''' <summary>
        ''' 'HKEY_CURRENT_USER' root key.
        ''' </summary>
        CurrentUser = &H1

        ''' <summary>
        ''' 'HKEY_LOCAL_MACHINE' root key.
        ''' </summary>
        AllUsers = &H2

    End Enum

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Specifies a Startup scope.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    Public Enum StartupScope As Integer

        ''' <summary>
        ''' 'Run' registry subkey.
        ''' </summary>
        Run = &H1

        ''' <summary>
        ''' 'RunOnce' registry subkey.
        ''' </summary>
        RunOnce = &H2

    End Enum

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Specifies a registry scope.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    Public Enum RegistryScope As Integer

        ''' <summary>
        ''' 'System32' registry subkey.
        ''' </summary>
        System32 = &H1

        ''' <summary>
        ''' 'SysWow64' registry subkey.
        ''' </summary>
        SysWow64 = &H2

    End Enum

#End Region

#Region " Public Methods "

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Adds an application to Windows Startup.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <param name="userScope">
    ''' The user scope.
    ''' </param>
    ''' 
    ''' <param name="startupScope">
    ''' The startup scope.
    ''' </param>
    ''' 
    ''' <param name="registryScope">
    ''' The registry key scope.
    ''' </param>
    ''' 
    ''' <param name="title">
    ''' The registry entry title.
    ''' </param>
    ''' 
    ''' <param name="filePath">
    ''' The application file path.
    ''' </param>
    ''' 
    ''' <param name="secureModeByPass">
    ''' If set to <see langword="True"/>, the file is ran even when the user logs into 'Secure Mode' on Windows.
    ''' </param>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <exception cref="System.ArgumentNullException">
    ''' title or filePath
    ''' </exception>
    ''' ----------------------------------------------------------------------------------------------------
    <DebuggerHidden>
    <DebuggerStepThrough>
    Public Sub Add(ByVal userScope As UserScope,
                   ByVal startupScope As StartupScope,
                   ByVal registryScope As RegistryScope,
                   ByVal title As String,
                   ByVal filePath As String,
                   Optional ByVal arguments As String = "",
                   Optional secureModeByPass As Boolean = False)

        If String.IsNullOrEmpty(title) Then
            Throw New ArgumentNullException(paramName:="title")

        ElseIf String.IsNullOrEmpty(filePath) Then
            Throw New ArgumentNullException(paramName:="filePath")

        Else
            If secureModeByPass Then
                title = title.TrimStart("*"c).Insert(0, "*")
            End If

            Dim regKey As RegistryKey = Nothing
            Try
                regKey = WinStartupUtil.GetRootKey(userScope).OpenSubKey(GetSubKeyPath(startupScope, registryScope), writable:=True)
                regKey.SetValue(title, String.Format("""{0}"" {1}", filePath, arguments), RegistryValueKind.String)

            Catch ex As Exception
                Throw

            Finally
                If regKey IsNot Nothing Then
                    regKey.Close()
                End If

            End Try

        End If

    End Sub

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Removes an application from Windows Startup.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <param name="userScope">
    ''' The user scope.
    ''' </param>
    ''' 
    ''' <param name="startupScope">
    ''' The startup scope.
    ''' </param>
    ''' 
    ''' <param name="registryScope">
    ''' The registry scope.
    ''' </param>
    ''' 
    ''' <param name="title">
    ''' The registry entry to find.
    ''' </param>
    ''' 
    ''' <param name="throwOnMissingValue">
    ''' if set to <see langword="true"/>, throws an exception on missing value.
    ''' </param>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <exception cref="System.ArgumentNullException">
    ''' title
    ''' </exception>
    ''' 
    ''' <exception cref="System.ArgumentException">
    ''' Registry value not found.;title
    ''' </exception>
    ''' ----------------------------------------------------------------------------------------------------
    <DebuggerHidden>
    <DebuggerStepThrough>
    Friend Sub Remove(ByVal userScope As UserScope,
                      ByVal startupScope As StartupScope,
                      ByVal registryScope As RegistryScope,
                      ByVal title As String,
                      Optional ByVal throwOnMissingValue As Boolean = False)

        If String.IsNullOrEmpty(title) Then
            Throw New ArgumentNullException(paramName:="title")

        Else
            Dim valueName As String = String.Empty
            Dim regKey As RegistryKey = Nothing

            Try
                regKey = WinStartupUtil.GetRootKey(userScope).OpenSubKey(GetSubKeyPath(startupScope, registryScope), writable:=True)

                If (regKey.GetValue(title, defaultValue:=Nothing) IsNot Nothing) Then
                    valueName = title

                ElseIf (regKey.GetValue(title.TrimStart("*"c).Insert(0, "*"), defaultValue:=Nothing) IsNot Nothing) Then
                    valueName = title.TrimStart("*"c).Insert(0, "*")

                ElseIf throwOnMissingValue Then
                    Throw New ArgumentException(paramName:="title", message:="Registry value not found.")

                End If

                regKey.DeleteValue(valueName, throwOnMissingValue)

            Catch ex As Exception
                Throw

            Finally
                If regKey IsNot Nothing Then
                    regKey.Close()
                End If

            End Try

        End If

    End Sub

#End Region

#Region " Private Methods "

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Gets a <see cref="RegistryKey"/> instance of the specified root key.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <param name="userScope">
    ''' The user scope.
    ''' </param>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <returns>
    ''' A <see cref="RegistryKey"/> instance of the specified root key.
    ''' </returns>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <exception cref="System.ArgumentException">
    ''' Invalid enumeration value.;userScope
    ''' </exception>
    ''' ----------------------------------------------------------------------------------------------------
    <DebuggerHidden>
    <DebuggerStepThrough>
    Private Function GetRootKey(ByVal userScope As UserScope) As RegistryKey

        Select Case userScope

            Case WinStartupUtil.UserScope.CurrentUser
                Return Registry.CurrentUser

            Case WinStartupUtil.UserScope.AllUsers
                Return Registry.LocalMachine

            Case Else
                Throw New ArgumentException("Invalid enumeration value.", "userScope")

        End Select ' userScope

    End Function

    ''' ----------------------------------------------------------------------------------------------------
    ''' <summary>
    ''' Gets the proper registry subkey path from the parameters criteria.
    ''' </summary>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <param name="startupScope">
    ''' The startup scope.
    ''' </param>
    ''' 
    ''' <param name="registryScope">
    ''' The registry key scope.
    ''' </param>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <returns>
    ''' The registry subkey path.
    ''' </returns>
    ''' ----------------------------------------------------------------------------------------------------
    ''' <exception cref="System.ArgumentException">
    ''' Invalid enumeration value.;startupScope or 
    ''' Invalid enumeration value.;registryScope
    ''' </exception>
    ''' ----------------------------------------------------------------------------------------------------
    <DebuggerHidden>
    <DebuggerStepThrough>
    Private Function GetSubKeyPath(ByVal startupScope As StartupScope,
                                   ByVal registryScope As RegistryScope) As String

        Select Case registryScope

            Case WinStartupUtil.RegistryScope.System32

                Select Case startupScope

                    Case WinStartupUtil.StartupScope.Run
                        Return WinStartupUtil.RunSubKeyPath

                    Case WinStartupUtil.StartupScope.RunOnce
                        Return WinStartupUtil.RunOnceSubKeyPath

                    Case Else
                        Throw New ArgumentException("Invalid enumeration value.", "startupScope")

                End Select ' startupScope

            Case WinStartupUtil.RegistryScope.SysWow64

                Select Case startupScope

                    Case WinStartupUtil.StartupScope.Run
                        Return WinStartupUtil.RunSubKeyPathSysWow64

                    Case WinStartupUtil.StartupScope.RunOnce
                        Return WinStartupUtil.RunOnceSubKeyPathSysWow64

                    Case Else
                        Throw New ArgumentException("Invalid enumeration value.", "startupScope")

                End Select ' startupScope

            Case Else
                Throw New ArgumentException("Invalid enumeration value.", "registryScope")

        End Select ' registryScope

    End Function

#End Region

End Module

#End Region

verwandte Informationen