为什么''尝试... Catch ..结束尝试“没有捕获所有异常?VB.NET

时间:2012-12-19 12:42:25

标签: vb.net visual-studio-2008 securityexception

发生此错误

''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上出现错误,我在管理员帐户中登录)

1 个答案:

答案 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。