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

Как запустить программу автоматически как администратор при запуске Windows?

Я создал свое собственное родительское приложение для контроля активности моих детей. Только графический интерфейс приложения - это значок панели задач. Программа установлена ​​как администратор. Я хочу, чтобы эта программа запускалась автоматически как администратор при запуске Windows, чтобы стандартные пользователи не могли ее убить из диспетчера задач.

Я могу создать раздел реестра:

HKLM\Software\Microsoft\Windows\CurrentVersion\Run

чтобы он запускался автоматически при запуске Windows. Проблема в том, что программа запускается как зарегистрированный (стандартный) пользователь.

Как я могу запустить его в режиме повышенной безопасности? Это вообще возможно в Win7?

4b9b3361

Ответ 1

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

Это реализация, которая используется для автоматического запуска процессов с правами администратора при входе в систему как обычный пользователь.

Я использовал его для запуска вспомогательного процесса OpenVPN GUI, который требует повышенных привилегий для правильной работы и, следовательно, не будет запускаться должным образом из раздела реестра.

В командной строке вы можете создать задачу из описания XML того, что вы хотите выполнить; поэтому, например, у нас есть это, экспортированное из моей системы, которое запустило бы блокнот с самыми высокими привилегиями при входе в систему:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2015-01-27T18:30:34</Date>
    <Author>Pete</Author>
  </RegistrationInfo>
  <Triggers>
    <LogonTrigger>
      <StartBoundary>2015-01-27T18:30:00</StartBoundary>
      <Enabled>true</Enabled>
    </LogonTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>CHUMBAWUMBA\Pete</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>"c:\windows\system32\notepad.exe"</Command>
    </Exec>
  </Actions>
</Task>

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

schtasks /create /tn "start notepad on login" /xml startnotepad.xml

этот ответ действительно должен быть перенесен на один из других сайтов stackexchange, поскольку он фактически не является вопросом программирования сам по себе.

Ответ 2

schtasks /create /sc onlogon /tn MyProgram /rl highest /tr "exeFullPath"

Ответ 3

Это невозможно.
Однако вы можете создать службу, которая выполняется под административным пользователем.

Служба может запускаться автоматически при запуске и взаимодействовать с вашим существующим приложением.
Когда приложение должно что-то делать как администратор, оно может попросить службу сделать это для него.

Помните, что сразу несколько пользователей могут быть зарегистрированы.

Ответ 4

Настройка совместимости вашего приложения с администратором (Run theprogram as an administrator).

Подключите его к task scheduler, затем выключите UAC.

Ответ 5

Я думаю, что использование планировщика задач для автозапуска программ не очень удобно, а иногда оно имеет побочные эффекты для меня (например, значок в трее для программы не добавляется).

Чтобы исправить это, я создал программу под названием "Повышенный запуск", которая сначала перезаписывается с правами администратора, затем запускает все файлы в каталоге. Так как Elevated Startup теперь повышен, все запущенные программы также получают права администратора. Каталог находится в меню "Пуск" рядом с классическим каталогом "Автозагрузка" и работает очень точно.

Вы можете столкнуться с одним диалоговым окном UAC, когда программа перезагрузится, в зависимости от настроек UAC.

Вы можете получить программу здесь: https://stefansundin.github.io/elevatedstartup/

Ответ 6

Программа, которую я написал, farmComm, может решить эту проблему. Я выпустил его как открытый и общедоступный.

Если это не соответствует вашим критериям, вы можете легко изменить его, чтобы сделать это.

farmComm:

  • Запускается при загрузке под службой, которая продолжается, когда пользователи входят в систему или выходят из нее.
    • В сеансе 0
    • Под пользователем "NT AUTHORITY\SYSTEM."
  • порождает произвольные процессы (вы выбираете);
    • Также в сеансе 0
    • "Невидимо" или без отображения пользовательского интерфейса /GUI
    • Доступ к графическому оборудованию (например, графическим процессорам).
    • Отвечает на активный сеанс, даже если он изменяется, включая Secure Desktop. Вот как это:
    • Инициализирует процессы только после простоя пользователя в течение 8,5 минут.
    • Завершает сбой при выходе пользователя из режима ожидания

Исходные скрипты доступны здесь:

https://github.com/r-alex-hall/farmComm

Ответ 7

Вы также должны учитывать последствия безопасности для запуска процесса как пользователя уровня администратора или службы. Если какой-либо вход не проверен правильно, например, если он прослушивает сетевой интерфейс. Если синтаксический анализатор для этого ввода не проверяет правильность, его можно злоупотреблять и, возможно, привести к эксплойту, который может запускать код как повышенный пользователь. в примере abatishchev это не должно быть большой проблемой, но если оно должно быть развернуто в корпоративной среде, выполните оценку безопасности до широкомасштабного развертывания.

Ответ 8

Вы можете сделать это, установив задачу во время работы в качестве администратора с помощью TaskSchedler library. Я делаю предположение, что .NET/С# - подходящая платформа/язык, учитывая ваши связанные вопросы.

Эта библиотека предоставляет вам подробный доступ к API планировщика заданий, поэтому вы можете отрегулировать параметры, которые вы не можете установить в командной строке, вызывая schtasks, например, приоритет запуска. Будучи приложением для родительского контроля, вы хотите, чтобы у него был приоритет запуска 0 (максимум), который schtasks будет создавать по умолчанию приоритет 7.

Ниже приведен пример кода для установки правильно настроенной задачи запуска для запуска требуемого приложения в качестве администратора на неопределенный срок при входе в систему. Этот код установит задачу для самого процесса, из которого она выполняется.

/*
Copyright © 2017 Jesse Nicholson  
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

/// <summary>
/// Used for synchronization when creating run at startup task.
/// </summary>
private ReaderWriterLockSlim m_runAtStartupLock = new ReaderWriterLockSlim();

public void EnsureStarupTaskExists()
{
    try
    {
        m_runAtStartupLock.EnterWriteLock();


        using(var ts = new Microsoft.Win32.TaskScheduler.TaskService())
        {
            // Start off by deleting existing tasks always. Ensure we have a clean/current install of the task.
            ts.RootFolder.DeleteTask(Process.GetCurrentProcess().ProcessName, false);

            // Create a new task definition and assign properties
            using(var td = ts.NewTask())
            {
                td.Principal.RunLevel = Microsoft.Win32.TaskScheduler.TaskRunLevel.Highest;
                // This is not normally necessary. RealTime is the highest priority that
                // there is.
                td.Settings.Priority = ProcessPriorityClass.RealTime;
                td.Settings.DisallowStartIfOnBatteries = false;
                td.Settings.StopIfGoingOnBatteries = false;
                td.Settings.WakeToRun = false;
                td.Settings.AllowDemandStart = false;
                td.Settings.IdleSettings.RestartOnIdle = false;                    
                td.Settings.IdleSettings.StopOnIdleEnd = false;
                td.Settings.RestartCount = 0;                    
                td.Settings.AllowHardTerminate = false;
                td.Settings.Hidden = true;
                td.Settings.Volatile = false;
                td.Settings.Enabled = true;
                td.Settings.Compatibility = Microsoft.Win32.TaskScheduler.TaskCompatibility.V2;
                td.Settings.ExecutionTimeLimit = TimeSpan.Zero;

                td.RegistrationInfo.Description = "Runs the content filter at startup.";

                // Create a trigger that will fire the task at this time every other day
                var logonTrigger = new Microsoft.Win32.TaskScheduler.LogonTrigger();
                logonTrigger.Enabled = true;                    
                logonTrigger.Repetition.StopAtDurationEnd = false;
                logonTrigger.ExecutionTimeLimit = TimeSpan.Zero;
                td.Triggers.Add(logonTrigger);

                // Create an action that will launch Notepad whenever the trigger fires
                td.Actions.Add(new Microsoft.Win32.TaskScheduler.ExecAction(Process.GetCurrentProcess().MainModule.FileName, "/StartMinimized", null));

                // Register the task in the root folder
                ts.RootFolder.RegisterTaskDefinition(Process.GetCurrentProcess().ProcessName, td);
            }
        }                
    }
    finally
    {
        m_runAtStartupLock.ExitWriteLock();
    }
}

Ответ 9

Я думаю, что планировщик задач будет чрезмерным (imho). Для win7 есть папка для запуска.

C:\Users\miliu\AppData\Роуминг\Microsoft\Windows\Пуск\Programs\Запуск

Просто создайте ярлык для своего автозапуска Applicaton, отредактируйте свойства ярлыка и всегда выполняйте его как администратор.

Ваши дети могли бы закрыть его, конечно, но если они технически подкованны, они всегда находят способ удержать вас. Я знаю, что сделал, когда был моложе.

Удачи!