首页 > 解决方案 > 以编程方式禁用任务管理器 (ctrl+alt+del)

问题描述

我目前正在开发一个应用程序来更轻松地配置 Win10 IoT 机器。想象一下,一个用户在使用自定义 shell 并且几乎所有预定义的快捷方式都被禁用,因此他只能使用生产应用程序。然而,为了切换用户和配置系统,“Win+L”必须保持启用。现在在出现的“Win+L”屏幕中,他仍然可以找到进入任务管理器的选项(这是不希望的)。管理员可以防止这种情况发生是使用 gpedit 并更改机器上的 ctrl+alt+del 选项。这正是我想做的。

使用 c# 以编程方式禁用任务管理器

非常接近,但是此注册表项仅适用于当前登录的用户,在我的情况下是管理员,因为配置工具需要管理权限(可以配置 UWF 过滤器等)。

如果我在 LocalMachine 而不是 CurrentUser 中尝试相同的操作,则会按预期创建注册表项,但它根本没有任何效果。

预先感谢您的帮助。

标签: c#registrytaskmanagergroup-policy

解决方案


我找到了一种方法来实现我想要的:

public void SetTaskManager(bool enable)
    {
      // Load settings of desired user via UserName property
      using (PowerShell PowerShellInstance = PowerShell.Create())
      {
        var command = Properties.Settings.Default.LoadRegistryOfUser;
        command = command.Replace("USERNAME", UserName);
        PowerShellInstance.AddScript(command);
        var res = PowerShellInstance.Invoke();
      }

      // Create the key and entry for the registry or delete it if
      // enable == true
      RegistryKey objRegistryKey = Registry.Users.CreateSubKey(
         UserName + @"\Software\Microsoft\Windows\CurrentVersion\Policies\System");
      if (enable && objRegistryKey.GetValue("DisableTaskMgr") != null)
        objRegistryKey.DeleteValue("DisableTaskMgr");
      else
        objRegistryKey.SetValue("DisableTaskMgr", "1", RegistryValueKind.DWord);

      objRegistryKey.Close();

      // Close the registry of the user, otherwise he cant log on
      using (PowerShell PowerShellInstance = PowerShell.Create())
      {
        var command = Properties.Settings.Default.CloseRegistryOfUser;
        command = command.Replace("USERNAME", UserName);
        PowerShellInstance.AddScript(command);
        var res = PowerShellInstance.Invoke();
      }
    }

脚本:

LoadRegistryOfUser: reg load HKU\USERNAME C:\users\USERNAME\NTUSER.DAT

CloseRegistryOfUser: reg unload HKU\USERNAME

它有点hacky,但到目前为止我发现的唯一方法。希望这可以帮助。


推荐阅读