Данный пример показывает, как на кнопку добавить значок UAC, показывающий, что выполнение операции требует повышения прав. Также показано, как перезапустить программу с повышением прав.
Код
Imports System.Diagnostics
Imports System.Windows.Forms
Imports System.Security.Principal
Public Class VistaSecurity
Private Declare Auto Function SendMessage Lib "user32.dll" _
(ByVal hwnd As IntPtr, _
ByVal msg As UInteger, _
ByVal wParam As UInteger, _
ByVal lParam As UInteger) As UInteger
Private Const BCM_FIRST As Integer = &H1600
Private Const BCM_SETSHIELD As Integer = BCM_FIRST + &HC
Private Shared m_wp As WindowsPrincipal
Private Shared ReadOnly Property wp() As WindowsPrincipal
Get
If (m_wp Is Nothing) Then m_wp = New WindowsPrincipal(WindowsIdentity.GetCurrent())
Return m_wp
End Get
End Property
Public Shared Function IsAdministrator() As Boolean
Return wp.IsInRole(WindowsBuiltInRole.Administrator)
End Function
Public Shared Sub AddUACShield(ByVal b As Button)
b.FlatStyle = FlatStyle.System
SendMessage(b.Handle, BCM_SETSHIELD, 0, &HFFFFFFFFUI)
End Sub
Public Shared Sub RestartElevated()
Dim startInfo As New ProcessStartInfo(Application.ExecutablePath)
startInfo.UseShellExecute = True
startInfo.WorkingDirectory = Environment.CurrentDirectory
startInfo.Verb = "runas"
Try
Process.Start(startInfo)
Catch ex As System.ComponentModel.Win32Exception
Return
End Try
Application.Exit()
End Sub
End Class
'// Использование:
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
If (Not VistaSecurity.IsAdministrator()) Then VistaSecurity.AddUACShield(Button1)
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
If (VistaSecurity.IsAdministrator()) Then
' do admin task
Else
VistaSecurity.RestartElevated()
End If
End Sub
End Class
Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.