发生此错误
''System.Security.SecurityException: Requested registry access is not allowed.
at System.ThrowHelper.ThrowSecurityException(ExceptionResource resource)''
当我尝试向Registry添加密钥时。我提到requestExecutionLevel的应用程序是“requireAdministrator”。 启用ClickOnce安全设置并保留requestedExecutionLevel''asinvoker'是更好的想法吗?
这是VB.NET代码的结构:
Try
[my code]
Catch sec As Security.SecurityException
[another block of code]
Catch ex As Exception
[another block of code]
End Try
使用'on error resume next'声明是否更好?请向我解释为什么会出现这种错误?
VB.NET,Visual Studio 2008(在Vindows Vista Ultimate x86和Windows 7 Ultimate x64上出现错误,我在管理员帐户中登录)
答案 0 :(得分:0)
用户帐户控制(UAC)甚至需要管理员组帐户来提升应用程序。用户必须在应用程序启动时通过提交UAC对话框授予该提升。
因此您需要使用
编辑app.manifest<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
如果您不希望应用程序在每次启动时触发UAC,您可以将需要提升的操作外包给另一个可执行文件,并从您的非高效流程中调用它
Dim elevatedProc As New Process
elevatedProc.FileName= "elevated.exe"
Try
elevatedProc.Start()
Catch ex As System.ComponentModel.Win32Exception
MsgBox("Please commit UAC dialog")
End Try
如果用户未提交UAC对话框,则抛出System.ComponentModel.Win32Exception。
或者,您可以在系统帐户下运行的服务中运行您的内容,这根本不会触发UAC。