Подтвердить что ты не робот

Как настроить запуск программы при запуске

У меня есть небольшое приложение с опцией CheckBox, которую пользователь может установить, если они хотят, чтобы приложение начиналось с Windows.

Мой вопрос в том, как настроить приложение для запуска при запуске.

ps: Я использую С# с .NET 2.0.

4b9b3361

Ответ 1

Несколько вариантов в порядке предпочтения:

  1. Добавьте его в папку запуска текущего пользователя. Это требует наименьших разрешений для запуска вашего приложения и дает пользователю максимальный контроль и обратную связь о происходящем. Недостатком является то, что немного сложнее определить, показывать ли уже установленный флажок при следующем просмотре этого экрана в вашей программе.
  2. Добавьте его в HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run. Единственная проблема здесь - требуется доступ на запись в реестр, что не всегда доступно.
  3. Создать запланированное задание, которое запускается при входе пользователя в систему
  4. Добавьте его в HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run. Единственная проблема здесь - требуется доступ на запись в реестр, что не всегда доступно.
  5. Настройте его как службу Windows. Делайте это только в том случае, если вы действительно это имеете в виду, и вы точно знаете, что хотите запустить эту программу для всех пользователей компьютера.

Этот ответ сейчас старше. С тех пор, как я написал это, была выпущена Windows 10, которая меняет работу папок меню "Пуск", включая папку " Startup ". Мне еще не ясно, насколько легко просто добавить или удалить файл в этой папке, не ссылаясь также на внутреннюю базу данных, используемую Windows для этих расположений.

Ответ 2

Спасибо всем за быстрый ответ. Джоэл, я использовал твой вариант 2 и добавил ключ реестра в папку "Выполнить" текущего пользователя. Здесь код, который я использовал для всех, кто заинтересован.

    using Microsoft.Win32;
    private void SetStartup()
    {
        RegistryKey rk = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

        if (chkStartUp.Checked)
            rk.SetValue(AppName, Application.ExecutablePath);
        else
            rk.DeleteValue(AppName,false);            

    }

Ответ 4

Вы можете создать запись реестра в "HKCU\Software\Microsoft\Windows\CurrentVersion\Run", просто имейте в виду, что она может работать по-разному в Vista. Ваша настройка может быть "виртуализирована" из-за UAC.

Ответ 5

Здесь вы можете добавить свою программу для запуска Windows Vista, 7, 8, 10.

  • Путь файла

C:\Users\Bureau Briffault\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (отображается из диспетчера задач, запускается при успешном входе текущего пользователя, прав администратора не требуется)

C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (отображается из диспетчера задач, работает при успешном входе всех пользователей, требуются права администратора)


  • Путь к реестру

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run (отображается из диспетчера задач, запускается при успешном входе текущего пользователя, прав администратора не требуется)

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce (не отображается из диспетчера задач, выполняется при успешном входе текущего пользователя, выполняется в течение одного времени входа, никаких прав администратора не требуется)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run (отображается из диспетчера задач, работает при успешном входе всех пользователей, требуются права администратора)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce (не отображается из диспетчера задач, выполняется при успешном входе всех пользователей, выполняется в течение одного времени входа, требуются права администратора)


  • Диспетчер задач

Microsoft.Win32.Taskscheduler.dll (не отображается в диспетчере задач, работает при загрузке Windows, работает от имени администратора, требуются права администратора)

Ответ 6

Если приложение предназначено для запуска при запуске Windows (в отличие от того, когда пользователь входит в систему), единственным вариантом является включение службы Windows. Либо напишите приложение как услугу, либо напишите простую службу, которая существует только для запуска приложения.

Письменные услуги могут быть сложными и могут вводить ограничения, которые могут быть неприемлемыми для вашего конкретного случая. Один общий шаблон проектирования - это интерфейсная/задняя пара, с сервисом, который выполняет работу и интерфейс приложения, который связывается с сервисом для отображения информации пользователю.

С другой стороны, если вы просто хотите, чтобы ваше приложение запускалось при входе в систему, вы можете использовать методы 1 или 2, перечисленные Джоэлем Кохорном.

Ответ 7

В дополнение к ответу Xepher Dotcom, путь к папке при запуске Windows должен быть закодирован следующим образом:

var Startup = Environment.GetFolderPath(Environment.SpecialFolder.Startup);

Ответ 8

    /// <summary>
    /// Add application to Startup of windows
    /// </summary>
    /// <param name="appName"></param>
    /// <param name="path"></param>
    public static void AddStartup(string appName, string path)
    {
        using (RegistryKey key = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
        {
            key.SetValue(appName, "\"" + path + "\"");
        }
    }

    /// <summary>
    /// Remove application from Startup of windows
    /// </summary>
    /// <param name="appName"></param>
    public static void RemoveStartup(string appName)
    {
        using (RegistryKey key = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
        {
            key.DeleteValue(appName, false);
        }
    }

Ответ 9

Это очень простое решение:

Добавить

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
key.SetValue("Your Application Name", Application.ExecutablePath);

Удалять

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
key.DeleteValue("Your Application Name", false);

Ответ 10

Вы можете сделать это с помощью класса win32 в пространстве имен Microsoft.

using Microsoft.Win32;

using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
 {
            key.SetValue("aldwin", "\"" + Application.ExecutablePath + "\"");
 }

Ответ 11

Для меня было проще всего добавить ярлык в папку автозагрузки. Мне пришлось добавить ссылку на "Объектную модель хоста скрипта Windows" и "Microsoft.CSharp", а затем использовать этот код:

IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
string shortcutAddress = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + @"\MyAppName.lnk";
System.Reflection.Assembly curAssembly = System.Reflection.Assembly.GetExecutingAssembly();

IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutAddress);
shortcut.Description = "My App Name";
shortcut.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
shortcut.TargetPath = curAssembly.Location;
shortcut.IconLocation = AppDomain.CurrentDomain.BaseDirectory + @"MyIconName.ico";
shortcut.Save();