在操作系统加固的计算机中使用c#禁用任务管理器
我正在使用下面的代码为一个工作正常的kiosk应用程序禁用任务管理器在操作系统加固的计算机中使用c#禁用任务管理器,c#,C#,我正在使用下面的代码为一个工作正常的kiosk应用程序禁用任务管理器 public void DisableTaskManager() { RegistryKey regkey; string keyValueInt = "1"; string subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"; try
public void DisableTaskManager()
{
RegistryKey regkey;
string keyValueInt = "1";
string subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";
try
{
regkey = Registry.CurrentUser.CreateSubKey(subKey);
regkey.SetValue("DisableTaskMgr", keyValueInt);
regkey.Close();
}
catch (Exception ex)
{
MessageBox.Show("DisableTaskManager" + ex.ToString());
}
}
但当我在操作系统加固的机器上运行时,我得到以下错误:
DisableTaskManagerSystem.UnauthorizedAccessException:
Access to the registry key 'HKey_Current_User\Software\Mictrosoft\Windows\CurrentVersion\Policies\System' is denied.
at Microsoft.win32.RegistryKey.win32Error(int32 errorcode, String str)
我怎样才能克服这个问题?我需要为一个Kiosk应用程序这样做。看看这个,我还不是一个好的C#开发人员来评论,但我知道在我与其他开发人员合作的过程中,他们在Windows7中访问了UAC,如果这是我们在这里讨论的话
好吧,安装那台机器的人基本上问了相反的问题。。。“如何防止非管理员干扰组策略”。因此,与其参与组策略军备竞赛,不如在以管理员身份运行时在安装时进行,或者在不以具有权限的用户身份运行时跳过该部分代码。不要让应用程序禁用任务管理器,而是使用windows服务或计划任务。您的应用程序将在当前用户的上下文中运行,并且将无权访问注册表项。相反,您可以创建windows服务或计划任务,该任务可以作为具有更高权限的用户运行,并可以写入注册表
使用windows服务,您可以通过任何IPC机制(如自定义服务消息、套接字、.NET远程处理、WCF或其他)与它通信,以告诉它打开/关闭任务管理器。代码需要提升权限才能访问注册表。然而,只有一段代码需要这些额外的权限。为了处理此类场景,将使用模拟,即您将仅以普通用户的身份执行此应用程序,但该特定代码段将以管理员的身份执行
我明白你为什么要这么做,但为什么要麻烦呢?在kiosk模式下运行时,它应该以低权限用户的身份运行,任何启动任务管理器的人实际上都无法使用它。@slugster,所以不可能?如果您登录的用户名必须没有足够的权限,请尝试在“gpedit.msc”中嗅探是否有任何注册表实体被禁用,这可能有助于您进一步追踪问题。我想我可能已经找到了答案,清单文件在windows XP中可用,并在Vista 7中得到了改进。这说明您必须通过清单文件授予应用程序权限。