我正在使用以下代码来提升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
答案 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()
它会在启动第二个具有提升权限的实例后关闭应用程序。