Vb.net 打开UAC窗口两次加载我的表单

Vb.net 打开UAC窗口两次加载我的表单,vb.net,Vb.net,我使用下面的代码来打开UAC窗口。它可以正常工作,但我的表单包含提升此窗口的按钮,显示了两次。我的意思是,如果我把它放在CopyFiile按钮中,当我点击这个按钮时,它会弹出UAC窗口,复制文件,给出成功消息,然后打开包含copyfile按钮的同一表单的另一个实例。请帮忙 Dim proc As New ProcessStartInfo proc.UseShellExecute = True proc.WorkingDirectory = Environment.Current

我使用下面的代码来打开UAC窗口。它可以正常工作,但我的表单包含提升此窗口的按钮,显示了两次。我的意思是,如果我把它放在CopyFiile按钮中,当我点击这个按钮时,它会弹出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

如果我错了,请纠正我,但我看到您的
proc
filename属性与其自身相等。您正在运行同一个应用程序,并创建了当前应用程序的两个实例,将其添加到代码中:

<DllImport("shell32.dll", EntryPoint:="IsUserAnAdmin")> _
Public Shared Function IsUserAnAdmin() As Boolean
End Function
现在,您可以添加第二个按钮(btnElevateMe),该按钮将使用您最初发布的代码提升权限并显示UAC提示。当使用特权运行时,它将变灰

此外,请在“End Try”之后向代码中添加以下内容:


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

你是说proc.Verb=“runas”我刚从微软网站上选择了这段代码。请更正我该怎么做。不,我的意思是proc.FileName=Application.ExecutablePath意味着要运行的文件名与当前运行的应用程序相同,因此这将生成应用程序的2个实例。我想你必须关闭“未经审核的表格”,非常感谢。让我试试这个。我回到您身边。
Me.Dispose只处理表单使用的资源(内存除外)。
-MSDN。它根本不会关闭窗体。。。您应该使用
Me.Close
If IsUserAnAdmin() = False Then
   btnCopyFile.enabled=false
ElseIf IsUserAnAdmin() = True Then
   btnCopyFile.enable=true
   btnElevateMe.enabled=false
End If
Application.Exit()