Как бы мне добавить совершенно другую программу на компьютер для автозагрузки? Это было бы что-то вроде этого?
My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True).SetValue(Application.ProductName, "C:\APPLICATIONSPATH.fileextension")
PS: Извините, что я нуб.
решение1
Добавить программу автозагрузки можно несколькими способами.
Во-первых, какую ОС вы используете? Судя по всему, это версия Windows?
А какой язык программирования вы хотите использовать? C Sharp?
Если предположить, что у вас есть привилегии на запись в реестр, то написанное вами выглядит в основном правильно. Вы пробовали это проверить? Также есть подраздел RunOnce, позволяющий программе запускаться только при следующем запуске. На самом деле я уже делал то, что вы пытаетесь сделать, но сейчас у меня компьютер с ограниченными привилегиями, поэтому я не могу проверить, что написанное вами совершенно правильно. Хотя идея должна быть хорошей :)
Вы также можете написать ярлык для папки "Автозагрузка" в меню "Пуск" Windows. Вы можете написать короткий фрагмент кода для создания файла ярлыка для приложения, которое вы хотите запустить, а затем попытаться записать файл ярлыка в правильный каталог запуска? Если это не файл ярлыка, напишите файл сценария, что намного проще. Возможно, что-то вроде:
@echo off
echo Running a startup program!
pause
::load program
start /b "" "C:\APPLICATIONSPATH.fileextension"
и программно записать это в файл с расширением .vbs. Таким образом, если пользователь, не разбирающийся в компьютерах, захочет вручную удалить элемент автозагрузки, он сможет легко это увидеть. (Я думаю, что это может быть способ, который будет работать без необходимости в административных правах. Может быть полезной альтернативой записи в реестр?)
Если вы используете Windows 8, эта папка автозагрузки больше не существует в меню «Пуск». Вместо этого ее можно найти здесь: C:\Users\YOURUSER\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
или с помощью командной строки Windows «Выполнить»: Win+ R
и запустивshell:startup
Посмотрите здесьWindows 8
решение2
Я разработал этот модуль, который упрощает добавление или удаление внешнего приложения из автозагрузки Windows с помощью методологии реестра.
Он охватывает область запуска (Run/RunOnce), область пользователя (Current User/All Users), область реестра (x86/x64), а также может добавлять обход для входа в Windows в «безопасном режиме».
Пример использования:
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)
Исходный код:
' ***********************************************************************
' 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