提升UAC窗口会加载我的表单两次

时间:2012-03-19 08:11:39

标签: vb.net

我正在使用以下代码来提升UAC窗口。它工作正常但我的表单包含提升此窗口的按钮显示两次。我的意思是如果我把它放在CopyFiile Button中,当我点击这个按钮时,它会引发UAC窗口,复制文件,给出成功消息,然后打开包含copyfile按钮的同一表单的另一个实例。请帮忙。

 Dim proc As New ProcessStartInfo
    proc.UseShellExecute = True
    proc.WorkingDirectory = Environment.CurrentDirectory
    proc.FileName = Application.ExecutablePath
    proc.Verb = "runas"
    Try
        Process.Start(proc)
    Catch
        ' The user refused to allow privileges elevation.
        MsgBox("Permission denied by user ! Can not proceed.", MsgBoxStyle.Critical)
        vrIfDenied = 1
        Return
    End Try

2 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我,但我看到你的proc文件名属性等于它的自我。您正在运行相同的应用程序并生成当前应用程序的2个实例

答案 1 :(得分:0)

将此添加到您的代码中:

<DllImport("shell32.dll", EntryPoint:="IsUserAnAdmin")> _
Public Shared Function IsUserAnAdmin() As Boolean
End Function

现在,当您的应用加载时,请检查它是否作为提升的权限运行,如果不是这样,请将这样的Copyfile按钮变灰:

If IsUserAnAdmin() = False Then
   btnCopyFile.enabled=false
ElseIf IsUserAnAdmin() = True Then
   btnCopyFile.enable=true
   btnElevateMe.enabled=false
End If

现在您可以添加第二个按钮(btnElevateMe),它将使用您最初发布的代码来提升权限并显示UAC提示。当运行WITH priviledges时,它将显示为灰色。

此外,在“结束尝试”之后添加到您的代码中:

Application.Exit()

它会在启动第二个具有提升权限的实例后关闭应用程序。