Добавление другой программы для запуска

727
mtone

Как добавить на компьютер совершенно другую программу для запуска? Было бы что-то вроде этого?

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

PS: извините за то, что я нуб.

1
Привет, ты кажешься здесь новым. Это нормальный вопрос, но вы задали его не на том сайте. Переполнение стека касается вопросов программирования, а не вопросов настройки программного обеспечения. Вы бы лучше спросили об этом на одном из родственных сайтов SuperUser Taryn East 10 лет назад 0
@TarynEast Это не вопрос настройки программного обеспечения, я просто спрашиваю, какой код мне понадобится, чтобы добавить приложение в автозагрузку 10 лет назад 0
да - вы спрашиваете о настройке программного обеспечения при запуске. Это действительно не вопрос о том, как писать компьютерные программы;) Taryn East 10 лет назад 0
Конечно, я могу ошибаться ... Вы спрашиваете, как это сделать, находясь в компьютерной программе? если так - добавьте это к вопросу ... :) Taryn East 10 лет назад 0
@Taryn East * Sigh * Хорошо, спасибо. 10 лет назад 1
Это не проблема - вопрос в порядке - просто задан на неправильном сайте StackExchange. Я уже пометил вопрос для переноса в SuperUser ... надеюсь, добрый модератор переместит его для вас. (вместе с ответами, которые вы уже получаете) :) Taryn East 10 лет назад 0

2 ответа на вопрос

1
JacobD

Есть несколько способов добавить программу запуска.

Во-первых, какую ОС вы используете? Судя по всему, это версия Windows?

А какой язык программирования вы хотите использовать? С острым?

Если у вас есть права на запись в реестр, то, что вы написали, выглядит в основном правильно. Вы пробовали проверить это? Также имеется подраздел 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 \ Меню Пуск \ Программы \ Автозагрузка

или с приглашением Windows Run: Win+ R и запустивshell:startup

enter image description here

Посмотрите здесь для Windows 8

1
ElektroStudios

I'd developed this module which facilitates the way to add or remove an external application to Windows startup trhough registry methodology.

It covers the startup scope (Run/RunOnce), the user scope (Current User/All Users), the registry scope (x86/x64) and also is capable to add a bypass for "Secure mode" windows logon.

An example usage:

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) 

The source-code:

' *********************************************************************** ' 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(""""" ", 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