시작시 Windows 7에서 관리자로 프로그램을 자동으로 실행하는 방법은 무엇입니까?


82

자녀 활동을 모니터링하기 위해 나만의 자녀 보호 앱을 만들었습니다. 앱의 유일한 GUI는 작업 표시 줄 아이콘입니다. 이 프로그램은 관리자로 설치됩니다. 이 프로그램이 Windows 시작시 관리자로 자동으로 시작되어 표준 사용자가 작업 관리자에서이를 죽일 수 없도록하고 싶습니다.

다음 위치에서 레지스트리 키를 만들 수 있습니다.

HKLM\Software\Microsoft\Windows\CurrentVersion\Run

Windows가 시작될 때 자동으로 실행되도록합니다. 문제는 프로그램이 로그인 한 (표준) 사용자로 시작된다는 것입니다.

관리자 모드에서 실행하려면 어떻게해야합니까? 이것이 Win7에서 가능합니까?


1
더 큰 문제는 로그인 한 사용자가 없으면 프로그램이 전혀 시작 되지 않는다는 것입니다. 이것은 로그인 할 때 프로그램을 실행하는 메커니즘 (예 : .loginUnix 의 스크립트), 부팅 할 때 실행되지 않는 (일부 /etc/rc/...스크립트 와 같은) 메커니즘 입니다.
Kaz

@Kaz : 문제가 될 것 같지 않습니다이 질문의 맥락에서 (로그인 화면과 아이의 상호 작용 관찰하기 위해 노력하지 않는 한)
벤 보이트를

답변:


61

시스템에 대한 관리 액세스 권한이 있고 해당 계정에 의해 시작된 프로세스에 부여되는 최고 권한이있는 사용자 계정을 사용하여 사용자 로그인 후 시작되도록 작업 스케줄러에 연결해야합니다.

일반 사용자로 로그인 할 때 관리 권한으로 프로세스를 자동 시작하는 데 사용되는 구현입니다.

올바르게 작동하려면 상승 된 권한이 필요한 '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 사이트 중 하나로 옮겨 져야합니다.


정보를 주셔서 대단히 감사합니다. 나는 그것을 시도하고 그것이 어떻게 작동하는지 볼 것이다.
뉴먼

1
"사용자 로그인 후"는 "Windows 시작"이 아닙니다.
Kaz

당신이 로그인 할 때까지 네,하지만 당신은 실제로 사용할 수있는 바탕이없는
Petesh

6
@Petesh 어떻게 이런 식으로 실행되는 UI 기반 앱을 얻었습니까? 작업 일정을 사용할 때 앱을 실행할 수 있지만 UI가 표시되지 않습니다.
gonzobrains 2013

레지스트리 변경을 통해이 작업을 수행하는 방법이 있는지 궁금합니다. 그렇다면 운영 체제를 부팅하지 않고도 (전) 예약 할 수 있습니다.
Sopalajo 드 Arrierez

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

2
세션 0에서 실행되지 않고 UI를 볼 수 없습니까 ?? 나는 같은 일을 원하고 그것을했지만 내 이름 아래 세션 0에서 실행되고 따라서 UI는 사용할 수 없습니다
가우 탐

4
"onlogon"은 Windows 시작이 아닙니다.
Kaz

1
Windows 7에서는 사용자의 데스크톱에서 실행됩니다. calc.exe로 시도하십시오.
Vladimir Panteleev

1
@CyberShadow 관리자 권한이 필요한 앱으로이 작업을 수행하려고합니다. 작업 관리자에 표시되지만 UI가 표시되지 않습니다.
gonzobrains

2
답변 해주셔서 감사합니다. 우리 IT 부서는 최근 회사 도메인의 모든 컴퓨터에 대해 그룹 정책을 통해 UAC를 사용하도록 설정했습니다. 안타깝게도 관리자 권한으로 명령 프롬프트를 실행하면 드라이브 매핑을 사용할 수 없습니다. 이전에는 모든 드라이브 매핑을 설정하는 "run"레지스트리 키를 통해 로그온 할 때 실행할 짧은 .bat 파일을 설정했습니다. 시작할 때 SYSTEM 계정에 대해 유사한 .bat를 실행하는 방법이 필요했습니다. "schtasks / ru SYSTEM"은 정확히 필요한 것입니다.
Sente

15

이건 불가능 해.
그러나 관리 사용자로 실행되는 서비스를 만들 수 있습니다.

이 서비스는 시작시 자동으로 실행되고 기존 애플리케이션과 통신 할 수 있습니다.
응용 프로그램이 관리자로서 작업을 수행해야하는 경우 서비스에이를 수행하도록 요청할 수 있습니다.

한 번에 여러 사용자가 로그온 할 수 있습니다.


즉각적인 답변에 감사드립니다. 실제로 Window Service에서 앱을 실행하려고했지만 작동하지 못했습니다. 작업 관리자 (SYSTEM 사용자로)에서 프로그램을 볼 수 있지만 아이콘이 작업 표시 줄에 표시되지 않습니다. Verb = "runas"를 StartInfo에 추가 할 때 "이 명령을 처리하는 데 사용할 수있는 스토리지가 충분하지 않습니다"라는 예외가 발생했습니다. 사용자에게 확인을 요청하는 GUI 팝업 방법이 없기 때문일 수 있습니다.
뉴먼

8
@miliu : 서비스는 사용자와 상호 작용할 수 없습니다. 서로 통신하는 두 개의 프로그램을 만들어야합니다.
SLaks 2011 년

6

작업 스케줄러를 사용하여 프로그램을 자동 시작하는 것은 매우 사용자 친화적이지 않고 때로는 나에게 부작용이있는 것 같습니다 (예 : 프로그램의 트레이 아이콘이 추가되지 않음).

이 문제를 해결하기 위해 먼저 관리자 권한으로 다시 시작된 다음 디렉터리의 모든 파일을 시작하는 Elevated Startup이라는 프로그램을 만들었습니다. 이제 Elevated Startup이 상승되었으므로 실행되는 모든 프로그램에도 관리자 권한이 부여됩니다. 이 디렉토리는 기본 시작 디렉토리 옆의 시작 메뉴에 있으며 거의 ​​동일하게 작동합니다.

UAC 설정에 따라 프로그램이 자체적으로 다시 시작될 때 하나의 UAC 대화 상자가 나타날 수 있습니다.

여기에서 프로그램을 얻을 수 있습니다 : https://stefansundin.github.io/elevatedstartup/


이것이 최근 답변이므로 의견을 추가하고 싶습니다. Windows 10에서 작업 스케줄러를 사용하여 내 프로그램에서 OP와 동일하게 수행하려고합니다. 그러나 내 프로그램을 내가 원하는 것이 아닌 백그라운드 프로세스로 시작합니다. 내 응용 프로그램이 관리자로 정상적으로 시작되기를 원합니다. 귀하의 프로그램이이를 설명합니까?
ThN

나는 그럴 것이라고 믿습니다. 바로 가기를 마우스 오른쪽 버튼으로 클릭하고 "관리자 권한으로 실행"을 사용한 것처럼 프로그램이 시작됩니다. 원하는대로 작동하지 않는 경우 사용 사례에 대해 자세히 알고 프로그램이 작동하도록하겠습니다.
stefansundin

3

응용 프로그램의 호환성을 관리자에게 설정합니다 (Run theprogram as an administrator).

에 연결 task scheduler한 다음 전원을 끕니다 UAC.


나도 같은 문제가 있습니다. UI가 보이지 않습니다. 모든 도움
Senthil Muthiah

1
@SenthilMuthiah 프로그램이 응용 프로그램이 아닌 백그라운드 프로세스로 실행되기 때문입니다. 나에게도 같은 일이 일어났습니다.
ThN

3

TaskSchedler 라이브러리 를 통해 관리자 권한으로 실행하는 동안 작업을 설치하면 됩니다. 여기서는 .NET / C #이 관련 질문에 적합한 플랫폼 / 언어라고 가정하고 있습니다.

이 라이브러리는 Task Scheduler 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();
    }
}

그것은 매끄러운 라이브러리입니다. "실시간"으로 무언가를 실행하는 것은 대부분의 경우 필요하지 않습니다. 그리고 당신은 td저를이 방향으로 알려 줘서 고마워요.
Andy

1
@Sonic 폐기에 대한 팁을 주셔서 감사합니다. 맞습니다. "실시간"은 일반적으로 필요하지 않습니다. 이 코드는 내가 작성한 오픈 소스 웹 콘텐츠 필터에서 복사되었으므로 최대한 빨리 시작해야합니다.

2

내가 작성한 프로그램 인 farmComm이이 문제를 해결할 수 있습니다. 나는 그것을 오픈 소스 및 퍼블릭 도메인으로 출시했습니다.

기준을 충족하지 않는 경우 쉽게 변경할 수 있습니다.

farmComm :

  • 사용자가 로그인하거나 로그 아웃 할 때 계속되는 서비스에서 부팅 할 때 실행됩니다.
    • 세션 0
    • 사용자 "NT AUTHORITY \ SYSTEM"아래에 있습니다.
  • 임의의 프로세스를 생성합니다 (선택).
    • 세션 0에서도
    • "보이지 않게"또는 사용자 인터페이스 / GUI 표시없이
    • 그래픽 하드웨어 (예 : GPU)에 액세스 할 수 있습니다.
    • 보안 데스크톱을 포함하여 변경된 경우에도 활성 세션에 응답합니다. 이것이 방법입니다.
    • 사용자가 8.5 분 동안 유휴 상태 일 때만 프로세스를 생성합니다.
    • 사용자가 유휴 상태에서 재개 할 때 스폰을 종료합니다.

소스 스크립트는 여기에서 사용할 수 있습니다.

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


2

또한 관리자 수준의 사용자 또는 서비스로 프로세스를 실행하는 보안 의미를 고려해야합니다. 네트워크 인터페이스에서 수신 대기하는 경우와 같이 입력이 제대로 검증되지 않은 경우. 이 입력에 대한 파서가 제대로 유효성을 검사하지 않으면 악용 될 수 있으며 상승 된 사용자로 코드를 실행할 수있는 악용으로 이어질 수 있습니다. abatishchev의 예에서는 그다지 문제가되지 않지만 엔터프라이즈 환경에 배포하려면 광범위한 배포 전에 보안 평가를 수행하십시오.


일부 프로그램은 권한 상승이 필요하며 반드시 보안 문제가있는 것은 아닙니다. 예를 들어, 시스템 온도를 모니터링하고 알림 영역에 표시하는 프로그램은 하드웨어에 액세스하려면 고도가 필요하고 자동 실행되어야하지만 보안이 문제가됩니다.
Synetech

-3

나는 작업 스케줄러가 과잉 일 것이라고 생각한다 (imho). win7 용 시작 폴더가 있습니다.

C : \ Users \ miliu \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup

자동 시작 응용 프로그램에 대한 바로 가기를 만들고 바로 가기의 속성을 편집하고 항상 관리자 권한으로 실행하십시오.

당신의 자녀는 물론 그것을 닫을 수 있지만 기술에 정통한 경우 항상 당신을 막을 방법을 찾습니다. 내가 어렸을 때 그랬다는 걸 알아.

행운을 빕니다!


6
작동하지 않습니다. Windows는 관리자로 실행하도록 설정된 시작 바로 가기를 무시합니다.
Vladimir Panteleev

정말? 시도해 보셨습니까? 내 쪽에서 잘 작동하기 때문입니다. 작업에 서라운드 사운드를 위해 관리자로 내 LogitechSoundManager을 자동 시작에 내가 ...이
zhengtonic

이 문제도 있습니다. 시작 폴더의 바로 가기에 "관리자 권한으로 실행"옵션이 선택되어 있어도 시작시로드되지 않습니다. 누구든지 이것을 고칠 방법을 알고 있습니까?
ycomp

2
CyberShadow는 컴퓨터의 UAC가 옳았습니다. 시작 프로그램 바로 가기 관리자가 작동하지 않습니다으로는 ... 하나는 taskscheduler 사용하는
zhengtonic

적어도 Windows 10에서는 이것이 작동하지 않는다는 것을 알았습니다. @ vladimir-panteleev가 말했듯이 Windows는 단순히 무시하는 것 같습니다.
E. 반 Putten의
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.