如何在Windows 7上启动时以管理员身份自动运行程序?
我创建了自己的家长控制应用程序来监控我孩子的活动。该应用程序的唯一GUI是任务栏图标。该程序以管理员身份安装。我希望这个程序在Windows启动时自动作为管理员用户启动,这样标准用户就不能从任务管理器中终止它 我可以在以下位置创建注册表项:如何在Windows 7上启动时以管理员身份自动运行程序?,windows,windows-7,uac,startup,Windows,Windows 7,Uac,Startup,我创建了自己的家长控制应用程序来监控我孩子的活动。该应用程序的唯一GUI是任务栏图标。该程序以管理员身份安装。我希望这个程序在Windows启动时自动作为管理员用户启动,这样标准用户就不能从任务管理器中终止它 我可以在以下位置创建注册表项: HKLM\Software\Microsoft\Windows\CurrentVersion\Run 使其在Windows启动时自动运行。问题是程序是以登录(标准)用户身份启动的 如何使其在提升模式下运行?这在Win7中可能吗 这是不可能的。 但是,您可以
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
使其在Windows启动时自动运行。问题是程序是以登录(标准)用户身份启动的
如何使其在提升模式下运行?这在Win7中可能吗 这是不可能的。但是,您可以创建在管理用户下运行的服务 该服务可以在启动时自动运行,并与现有应用程序通信。
当应用程序需要作为管理员执行某些操作时,它可以要求服务为其执行这些操作
请记住,可以同时登录多个用户。您需要将其插入任务计划程序,以便在用户登录后启动任务计划程序,使用对系统具有管理访问权限的用户帐户,并具有该帐户所启动进程的最高权限 这是用于在以普通用户身份登录时自动启动具有管理权限的进程的实现 我用它来启动“OpenVPN GUI”助手进程,该进程需要提升权限才能正常工作,因此无法从注册表项正常启动 在命令行中,您可以根据您想要完成的任务的XML描述创建任务;例如,我们从我的系统中导出了这个,当我登录时,它将以最高权限启动记事本:
2015-01-27T18:30:34
皮特
2015-01-27T18:30:00
真的
CHUMBAWUMBA\Pete
互动电视
高可用性
无知的新
假的
假的
真的
假的
假的
真的
假的
真的
真的
假的
假的
假的
PT0
7.
“c:\windows\system32\notepad.exe”
它由管理员命令提示符使用以下命令进行注册:
schtasks /create /tn "start notepad on login" /xml startnotepad.xml
这个答案实际上应该转移到其他stackexchange站点之一,因为它本身并不是一个编程问题
将应用程序的兼容性设置为管理员
(以管理员身份运行程序)
将其插入任务调度器,然后关闭UAC,我编写的一个程序farmComm可以解决这个问题。我以开源和公共领域的形式发布了它 如果它不符合您的标准,您可以很容易地修改它以达到此目的 农场通讯:
- 在启动时在服务下运行,在用户登录或注销时继续。
- 在会话0中
- 在用户“NT权限\系统”下
- 生成任意进程(您选择);
- 也在会话0中
- “不可见”,或不显示任何用户界面/GUI
- 可访问图形硬件(如GPU)
- 响应活动会话,即使它发生更改,包括安全桌面。它是这样的:
- 仅在用户空闲8.5分钟后生成进程
- 当用户从空闲状态恢复时终止生成
我认为任务调度器的功能过于强大(imho)。win7有一个启动文件夹 C:\Users\miliu\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 只需为autostart应用程序创建一个快捷方式,编辑快捷方式的属性并使其始终以管理员身份运行即可 你的孩子当然可以关闭它,但如果他们精通技术,他们总能找到办法让你远离。我知道我年轻的时候做过
祝你好运 > P>您还应该考虑将进程运行为管理员级用户或服务的安全性影响。如果任何输入未被正确验证,例如它正在网络接口上侦听。如果此输入的解析器未正确验证,则可能会被滥用,并可能导致利用此漏洞以提升用户身份运行代码。在abatishchev的例子中,这应该不是什么大问题,但如果要在企业环境中部署,请在大规模部署之前进行安全评估。我认为使用任务调度器自动启动程序对用户不太友好,有时会对我产生副作用(例如,未添加程序的托盘图标) 为了解决这个问题,我制作了一个名为提升启动的程序,该程序首先以管理员权限重新启动自身,然后启动目录中的所有文件。由于提升启动现在已提升,因此它随后启动的所有程序也都具有管理员权限。该目录位于“开始”菜单上的“经典启动”旁边而且工作原理基本相同 当程序重新启动时,您可能会遇到一个UAC对话框,具体取决于您的UAC设置
您可以在此处获得该程序:您可以在以管理员身份运行时通过安装任务来完成此操作。考虑到您的相关问题,我在此假设.NET/C#是一种合适的平台/语言 此库为您提供了对任务计划程序API的精确访问,因此您可以通过调用
schtasks
,调整无法通过命令行设置的设置,例如启动优先级。作为家长控制应用程序,您希望它的启动优先级为0(最大值),默认情况下,schtasks
将创建优先级7
下面是安装正确配置的启动任务以在登录时以管理员身份无限期运行所需应用程序的代码示例。此代码将为非常专业的应用程序安装任务
schtasks /create /sc onlogon /tn MyProgram /rl highest /tr "exeFullPath"
/*
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();
}
}