Як встановити програму для запуску під час запуску?


75

У мене є невелика програма з CheckBoxопцією, яку користувач може встановити, якщо хоче, щоб програма запускалася з Windows.

Моє питання полягає в тому, як мені насправді встановити програму для запуску під час запуску.

ps: Я використовую C # з .NET 2.0.


1
Якщо ваша програма виконує щось трудомістке або ресурсомістке під час запуску, наприклад, перевірка оновлень в Інтернеті, ви можете розглянути можливість впровадження таймера, щоб ваша програма працювала трохи після запуску. Один з моїх домашніх вихованців - це близько десятка програм на моєму комп’ютері, які перетягують все до сканування, оскільки всі вони перевіряють наявність оновлень під час запуску (так, я особливо дивлюсь на вас, iTunes та Java).
Дана Робінсон

Відповіді:


107

Кілька варіантів у порядку уподобання:

  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 використовує для цих розташувань.


є каталоги та ключі реєстру для поточного користувача та для всіх користувачів. вирішити, що вам потрібно для вашої заявки.
Michael Piendl,

Дякуємо усім, що так швидко відповіли. Джоел, я пішов з вами, варіант 2.
Спідей

Служба Windows так, але вам потрібно запустити програму з опцією Уособитись як користувач. Якщо ні, вона запустить програму лише один раз і під час системної сесії.
Патрік

Для номер 2, які дозволи ми розглядаємо? Я намагався з максимальним UAC на Win 7, і це ні про що не попереджало.
Dan W

@ Joel, у яких сценаріях у вас немає доступу до запису до HKCU? Думаю, навіть запрошений користувач може написати цей вулик реєстру
Ricardo Polo Jaramillo

128

Дякуємо усім, що так швидко відповіли. Джоеле, я скористався вашим варіантом 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);            

    }

3
Що таке змінна chkStartUp?
Фернандо Сантьяго

5
Я знаю, що запізнився, @fernado Santiago, але саме його прапорець дозволяє користувачеві додавати або видаляти програму із запуску.
Steve Byrne

1
Це не корисно для мене, це дає мені помилку дозволів. чи можу я якось вручну взяти дозволи, а потім випустити їх?
Джамшаїд К.

2
що це AppName?
сітневий

1
@mrid AppName - це просто заповнювач. По суті, це строковий формат. Просто замініть AppName на "Назва вашої програми".
Марк

11

Тут є всі способи додати програму до запуску для 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, Запуск від імені адміністратора, Потрібні права адміністратора)


я використовував це для запуску веблогічного сервера, а планувальник таксів здавався найкращим способом, оскільки ми не хотіли входити у вікна, щоб запустити сервер. однак головне зауважити, що процеси були видимими в диспетчері завдань під час роботи в якості адміністратора, а також не UIвідображалися. але сервер все ще працював нормально. (Windows Server 2016)
Ніклас,

@OP Ви забули варіант - створення служби Windows , яка запускає програму при запуску: stackoverflow.com/a/15719678/2441655
Venryx

6

На додаток до відповіді Xepher Dotcom, шлях до папки до запуску Windows слід кодувати таким чином:

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

5

Ви можете створити запис реєстру в "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run", лише майте на увазі, що він може працювати по-іншому в Vista. Ваше налаштування може отримати "віртуалізацію" через UAC.


5

Це настільки просте рішення:

Додавати

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);

3

Якщо програма призначена для запуску під час запуску Windows (на відміну від того, коли користувач входить в систему), ваш єдиний варіант - залучити службу Windows. Або напишіть програму як послугу, або напишіть просту послугу, яка існує лише для запуску програми.

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

З іншого боку, якщо ви просто хочете, щоб ваша програма запускалася з входу користувача, ви можете скористатися методами 1 або 2, перерахованими Джоелом Кегорном.


Ви можете використовувати утиліту NSSM для запуску довільної програми як послуги.
Mike Rosoft

1
    /// <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);
        }
    }

1

Я знайшов додавання ярлика до папки запуску як найпростіший для мене спосіб. Мені довелося додати посилання на "Об'єктну модель хосту сценарію 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();

0

Це можна зробити за допомогою класу win32 у просторі імен Microsoft

using Microsoft.Win32;

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

0

Додайте програму для автоматичного запуску під час запуску в Windows 10

Крок 1: Виберіть кнопку Пуск Windows і прокрутіть, щоб знайти програму, яку потрібно запустити під час запуску.

Крок 2: Клацніть програму правою кнопкою миші, виберіть Більше , а потім виберіть Відкрити розташування файлу . Це відкриває місце, де зберігається ярлик для програми. Якщо немає можливості відкрити розташування файлу , це означає, що програма не може працювати під час запуску.

Крок 3: Відкривши розташування файлу, натисніть клавішу з емблемою Windows + R , введіть shell: startup , а потім виберіть OK . Це відкриє папку запуску .

Крок 4: Скопіюйте та вставте ярлик у програму з розташування файлу в папку автозавантаження .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.