使用app.manifest运行具有管理员权限的Visual Studio [ExecutionLevel]
问题描述:
我需要更改注册表中的注册表项以限制用户使用任务管理器,因为它是Kiosk应用程序。我用于更改注册表的代码完美适用于管理员帐户。但我的应用程序将在普通用户帐户中运行。当我试图运行我在普通用户开户申请,我得到下面的错误:使用app.manifest运行具有管理员权限的Visual Studio [ExecutionLevel]
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)
,所以我需要运行我的所有管理员权限的应用程序。我正在使用下面的app.manifest。但一些如何得到相同的错误。如何克服这一点?
守则app.manifest:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft- com:asm.v2">
<ms_asmv2:security>
<ms_asmv2:requestedPrivileges>
<ms_asmv2:requestedExecutionLevel level="requireAdministrator" uiAccess="true">
</ms_asmv2:requestedExecutionLevel>
</ms_asmv2:requestedPrivileges>
</ms_asmv2:security>
</ms_asmv2:trustInfo>
</assembly>
答
代码需要提升的权限来访问注册表。但是只有一部分代码需要额外的许可。为了处理这种情况,使用模拟,即,你将只以普通用户的身份执行这个应用程序,但是这个特定的代码将被执行,就像你是一个管理员一样。
http://msdn.microsoft.com/en-us/library/system.security.principal.windowsimpersonationcontext.aspx