Автозапуск программы на Windows Server: Task Scheduler и автозагрузка
Самый надёжный способ автозапуска программы на Windows Server — Планировщик заданий (Task Scheduler) с триггером «At startup»: программа стартует при загрузке системы, даже без входа пользователя. Для приложений, которым нужен рабочий стол, подойдёт папка автозагрузки или реестр Run. Разберём все три варианта.
Какой способ выбрать
| Способ | Когда запускается | Нужен вход пользователя |
|---|---|---|
| Task Scheduler (At startup) | При загрузке ОС | Нет |
| Task Scheduler (At log on) | При входе | Да |
| Папка Startup | При входе пользователя | Да |
| Реестр Run | При входе пользователя | Да |
Для служб и фоновых процессов, работающих круглосуточно, используйте Task Scheduler «At startup». Для приложений с интерфейсом — автозагрузку при входе.
Способ 1. Планировщик заданий (рекомендуется)
Через графический интерфейс
- Откройте Task Scheduler (
taskschd.msc). - Справа нажмите Create Task (не Basic Task — так больше настроек).
- На вкладке General задайте имя и выберите Run whether user is logged on or not, отметьте Run with highest privileges.
- На вкладке Triggers → New выберите At startup.
- На вкладке Actions → New укажите путь к программе (например,
C:\apps\myapp.exe). - Нажмите OK и введите пароль учётной записи, от которой будет работать задача.
Через PowerShell
Создать такое же задание одной серией команд:
$action = New-ScheduledTaskAction -Execute "C:\apps\myapp.exe"
$trigger = New-ScheduledTaskTrigger -AtStartup
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
Register-ScheduledTask -TaskName "MyAppAutostart" -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -User "SYSTEM"
Проверить, что задача создана:
Get-ScheduledTask -TaskName "MyAppAutostart"
Запустить вручную для теста:
Start-ScheduledTask -TaskName "MyAppAutostart"
Способ 2. Папка автозагрузки
Программа запустится при входе конкретного пользователя. Откройте папку автозагрузки:
shell:startup
(для всех пользователей — shell:common startup). Поместите туда ярлык на программу. Через PowerShell можно создать ярлык программно:
$startup = [Environment]::GetFolderPath('Startup')
$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut("$startup\MyApp.lnk")
$shortcut.TargetPath = "C:\apps\myapp.exe"
$shortcut.Save()
Способ 3. Реестр Run
Значение в ветке Run запускает программу при входе пользователя:
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "MyApp" -Value "C:\apps\myapp.exe"
Для всех пользователей используйте ветку HKLM: вместо HKCU:.
Частые вопросы
Программа не стартует при загрузке — почему?
Чаще всего приложению нужен интерактивный рабочий стол, а задача настроена «Run whether user is logged on or not». Такие GUI-программы лучше запускать через триггер At log on или папку Startup.
Как запустить программу от имени администратора автоматически?
В Task Scheduler включите Run with highest privileges. Тогда задача стартует с повышенными правами без запроса UAC.
Чем Task Scheduler лучше папки автозагрузки?
Планировщик умеет запускать процессы до входа пользователя, с нужными правами, по расписанию и с перезапуском при сбое. Папка Startup работает только после входа в систему.
Как убрать программу из автозапуска?
Для задачи: Unregister-ScheduledTask -TaskName "MyAppAutostart" -Confirm:$false. Для реестра: Remove-ItemProperty. Для папки — удалите ярлык из shell:startup.
Нужен сервер, который держит ваши сервисы запущенными круглосуточно? Возьмите VPS на Windows или посмотрите тарифы на аренду VPS.
