在OS强化机器中使用c#禁用任务管理器

我正在使用以下代码禁用任务管理器,以便完美地运行Kiosk应用程序

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()); } } 

但是当我在OS强化机器中运行时,我得到以下错误,

 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#开发者评论,但我知道在我与其他开发人员合作期间他们来到了UAC在Windows 7中,如果那就是在这里谈论的内容。

http://www.aneef.net/2009/06/29/request-uac-elevation-for-net-application-managed-code/

那个设置该机器的人基本上反过来问……“我如何防止非管理员搞乱组策略”。 因此,参与组策略军备竞赛,您可以在作为管理员运行时在安装时执行此操作,或者在未以具有权限的用户身份运行时跳过该部分代码。

不要让您的应用程序禁用任务管理器,而是使用Windows服务或计划任务。 您的应用程序将在当前用户的上下文中运行,并且不具有注册表项的权限。 相反,您可以创建Windows服务或计划任务,它可以作为具有更高权限的用户运行,并可以写入注册表。

使用Windows服务,您可以通过任何IPC机制(如自定义服务消息,套接字,.NET Remoting,WCF等)进行通信,以告知它打开/关闭任务管理器。

代码需要提升权限才能访问注册表。 但是,只有一段代码需要这些额外的权限。 为了处理这种情况,使用模拟,即您将仅以普通用户身份执行此应用程序,但该特定代码段将像管理员一样执行。

http://msdn.microsoft.com/en-us/library/system.security.principal.windowsimpersonationcontext.aspx