以编程方式选择性地禁用Windows上的特定程序的UAC

Sam*_*ami 8 c# windows uac scheduled-tasks

在堆栈和其他论坛上有很多关于禁用/绕过/抑制UAC的帖子问题/答案.也有解决方案.但进步可能不是.我只能看到一种解决方案以编程方式禁用UAC,但也许没有真正的程序化解决方案.

可以有一个程序化的解决方案,用于保存用户每次运行像wamp这样的程序时都会被提示,并且他们总是必须单击是,所以告诉Windows他们的选择总是肯定会更好.我相信会有

我发现在这里 Windows通过GUI在Task Scheduler中提供了这个功能,所以它也必须通过代码.

更新:我准备了一个正在运行的纯编程解决方案.看我的回答.

Sam*_*ami 13

快速描述:创建一个新的控制台/窗口应用程序以绕过UAC运行任何应用程序,在下面的指导下选择此应用程序中目标应用程序的路径,编译此程序一次,并随时运行

一步步

  1. 从此Codeplex链接下载Microsoft.Win32.TaskScheduler.dll
  2. 制作ac#应用程序(Windows或控制台)并添加对上述dll的引用
  3. 将新项(应用程序清单文件)添加到项目(此应用程序)
  4. 更改<requestedExecutionLevel level="asInvoker" uiAccess="false" /><requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  5. 在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);          
   }
}
Run Code Online (Sandbox Code Playgroud)

6.现在编译并运行你的应用程序(这个应用程序)


现在你的应用程序(例如WAMP)将在没有按照你想要的时间表提示任何UAC对话的情况下运行(在我的情况下你每次登录窗口时)

来源

发起人:你能为一个应用程序关闭UAC吗?并有选择地禁用Windows 7上的特定程序的UAC

基本思路来自:让Vista在启动时使用Task Scheduler启动UAC限制程序

创建计划任务的基本实现