在堆栈和其他论坛上有许多关于禁用/绕过/抑制 UAC 的帖子问题/答案。也有解决方案。但在程序上也许不是。我只能看到一个解决方案 Disabling UAC programmatically但也许那里没有给出真正的程序化解决方案。
是否可以有一个程序化的解决方案来保存用户每次他/她运行像 wamp 这样的程序时都会被提示并且他们总是必须单击"is",所以最好告诉 Windows 他们的选择总是"is"。我相信会有这样的
我找到了 Here Windows 通过 GUI 在 Task Scheduler 中提供此功能,因此它也必须通过代码实现。
更新:我准备了一个可以正常工作的纯程序化解决方案。看我的回答。
最佳答案
简要说明:创建一个新的控制台/窗口应用程序以绕过 UAC 运行任何应用程序,按照下面的指导在该应用程序中选择目标应用程序的路径,编译该程序一次,并随时运行
一步一步
- 从 This Codeplex link 下载 Microsoft.Win32.TaskScheduler.dll
- 创建一个 c# 应用程序(Windows 或控制台)并添加对上述 dll 的引用
- 将新项目(应用程序 list 文件)添加到您的项目(此应用程序)
- 更改
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
至<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
- 在您的 program.cs 文件中编写以下代码
using System;
using Microsoft.Win32.TaskScheduler;
class Program
{
static void Main(string[] args)
{
TaskService ts = new TaskService();
TaskDefinition td = ts.NewTask();
td.Principal.RunLevel = TaskRunLevel.Highest;
//td.Triggers.AddNew(TaskTriggerType.Logon);
td.Triggers.AddNew(TaskTriggerType.Once); //
string program_path = @"c:\wamp\wampmanager.exe"; // you can have it dynamic
//even of user choice giving an interface in win-form or wpf application
td.Actions.Add(new ExecAction(program_path, null));
ts.RootFolder.RegisterTaskDefinition("anyNamefortask", td);
}
}
6.现在编译并运行你的应用程序(这个应用程序)
现在您的应用程序(例如 WAMP)将在您想要的时间表上运行而不会提示任何 UAC 对话框(在我的情况下每次您登录窗口时)
来源
发起于:Can you turn off UAC for a single app?和 Selectively disabling UAC for specific programs on Windows 7
基本想法来自:Make Vista launch UAC restricted programs at startup with Task Scheduler
的基本实现 Creating Scheduled Tasks
关于c# - 以编程方式有选择地禁用 Windows 上特定程序的 UAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191129/