자녀 활동을 모니터링하기 위해 나만의 자녀 보호 앱을 만들었습니다. 앱의 유일한 GUI는 작업 표시 줄 아이콘입니다. 이 프로그램은 관리자로 설치됩니다. 이 프로그램이 Windows 시작시 관리자로 자동으로 시작되어 표준 사용자가 작업 관리자에서이를 죽일 수 없도록하고 싶습니다.
다음 위치에서 레지스트리 키를 만들 수 있습니다.
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
Windows가 시작될 때 자동으로 실행되도록합니다. 문제는 프로그램이 로그인 한 (표준) 사용자로 시작된다는 것입니다.
관리자 모드에서 실행하려면 어떻게해야합니까? 이것이 Win7에서 가능합니까?
답변
시스템에 대한 관리 액세스 권한이 있고 해당 계정에 의해 시작된 프로세스에 부여되는 최고 권한이있는 사용자 계정을 사용하여 사용자 로그인 후 시작되도록 작업 스케줄러에 연결해야합니다.
일반 사용자로 로그인 할 때 관리 권한으로 프로세스를 자동 시작하는 데 사용되는 구현입니다.
올바르게 작동하려면 상승 된 권한이 필요한 ‘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 사이트 중 하나로 옮겨 져야합니다.
답변
schtasks /create /sc onlogon /tn MyProgram /rl highest /tr "exeFullPath"
답변
이건 불가능 해.
그러나 관리 사용자로 실행되는 서비스를 만들 수 있습니다.
이 서비스는 시작시 자동으로 실행되고 기존 애플리케이션과 통신 할 수 있습니다.
응용 프로그램이 관리자로서 작업을 수행해야하는 경우 서비스에이를 수행하도록 요청할 수 있습니다.
한 번에 여러 사용자가 로그온 할 수 있습니다.
답변
작업 스케줄러를 사용하여 프로그램을 자동 시작하는 것은 매우 사용자 친화적이지 않고 때로는 나에게 부작용이있는 것 같습니다 (예 : 프로그램의 트레이 아이콘이 추가되지 않음).
이 문제를 해결하기 위해 먼저 관리자 권한으로 다시 시작된 다음 디렉터리의 모든 파일을 시작하는 Elevated Startup이라는 프로그램을 만들었습니다. 이제 Elevated Startup이 상승되었으므로 실행되는 모든 프로그램에도 관리자 권한이 부여됩니다. 이 디렉토리는 기본 시작 디렉토리 옆의 시작 메뉴에 있으며 거의 동일하게 작동합니다.
UAC 설정에 따라 프로그램이 자체적으로 다시 시작될 때 하나의 UAC 대화 상자가 나타날 수 있습니다.
여기에서 프로그램을 얻을 수 있습니다 : https://stefansundin.github.io/elevatedstartup/
답변
응용 프로그램의 호환성을 관리자에게 설정합니다 (Run theprogram as an administrator)
.
에 연결 task scheduler
한 다음 전원을 끕니다 UAC
.
답변
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();
}
}
답변
내가 작성한 프로그램 인 farmComm이이 문제를 해결할 수 있습니다. 나는 그것을 오픈 소스 및 퍼블릭 도메인으로 출시했습니다.
기준을 충족하지 않는 경우 쉽게 변경할 수 있습니다.
farmComm :
- 사용자가 로그인하거나 로그 아웃 할 때 계속되는 서비스에서 부팅 할 때 실행됩니다.
- 세션 0
- 사용자 “NT AUTHORITY \ SYSTEM”아래에 있습니다.
- 임의의 프로세스를 생성합니다 (선택).
- 세션 0에서도
- “보이지 않게”또는 사용자 인터페이스 / GUI 표시없이
- 그래픽 하드웨어 (예 : GPU)에 액세스 할 수 있습니다.
- 보안 데스크톱을 포함하여 변경된 경우에도 활성 세션에 응답합니다. 이것이 방법입니다.
- 사용자가 8.5 분 동안 유휴 상태 일 때만 프로세스를 생성합니다.
- 사용자가 유휴 상태에서 재개 할 때 스폰을 종료합니다.
소스 스크립트는 여기에서 사용할 수 있습니다.