- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[VB.NET] Hướng dẫn lấy thông tin tài khoản đăng nhập windows và khởi động lại ứng dụng ở chế độ Administrator
Xin chào các bạn, bài viết hôm nay mình tiếp tục hướng dẫn các bạn cách lấy tên tài khoản user đăng nhập trên Windows bằng ngôn ngữ VB.NET, và cách khởi động lại ứng dụng với chế độ Admin.
[VB.NET] How to get user logined in Winform throught Run app as Administrator
Thông thường, các bạn sử dụng lệnh dưới đây để lấy thông tin tài khoản đang đăng nhập vào windows.
Imports System.Security.Principal
Module Module1
Sub Main()
Dim userName As String = System.Security.Principal.WindowsIdentity.GetCurrent().Name
Console.WriteLine("User Name: " & userName)
Console.ReadLine()
End Sub
End Module
Giống như hình ảnh, các bạn thấy mình đang đăng nhập vào Windows bằng tài khoản Guest.
Khi sử dụng lên trên nếu ứng dụng chúng ta chạy chế độ bình thường thì nó sẽ trả về kết quả là: Guest
Nhưng nếu bạn chạy app "Run As Administrator" thì nó lại trả về kết quả là "Administrator"
Nhưng mình muốn ở đây là, cho dù chạy thế nào vẫn phải trả đúng tên tài khoản mình đang login vào windows.
Giải pháp:
Mình sẽ sử dụng lệnh query user trên CMD, để lấy thông tin user session đang Active vào C#.
Source code VB.NET:
Imports System.Management
Imports System.Text.RegularExpressions
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim currentUser = GetCurrentUserLoginedWindows()
MessageBox.Show(currentUser)
End Sub
Public Function GetCurrentUserLoginedWindows() As String
Dim queryPath As String = String.Empty
If Environment.Is64BitOperatingSystem AndAlso Not Environment.Is64BitProcess Then
queryPath = System.IO.Path.Combine(Environment.GetEnvironmentVariable("windir"), "Sysnative", "query.exe")
Else
queryPath = System.IO.Path.Combine(Environment.GetEnvironmentVariable("windir"), "System32", "query.exe")
End If
Dim startInfo As New ProcessStartInfo(queryPath)
startInfo.Arguments = "user"
startInfo.CreateNoWindow = True
startInfo.RedirectStandardError = True
startInfo.RedirectStandardOutput = True
startInfo.UseShellExecute = False
startInfo.WindowStyle = ProcessWindowStyle.Hidden
Using p As New Process With {
.StartInfo = startInfo,
.EnableRaisingEvents = True
}
p.Start()
p.WaitForExit()
Dim result As String = p.StandardOutput.ReadToEnd()
Dim dataTable As New DataTable()
Dim lines As String() = result.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
Dim column = 0
For Each line As String In lines
Dim pattern As String = "\s{2,}"
Dim columns As String() = Regex.Split(line.Trim(), pattern)
If column = 0 Then
For Each col As String In columns
dataTable.Columns.Add(col)
Next
column = column + 1
Else
Dim row As DataRow = dataTable.NewRow()
For i As Integer = 0 To Math.Min(dataTable.Columns.Count - 1, columns.Length - 1)
row(i) = columns(i)
Next
dataTable.Rows.Add(row)
End If
Next
Return dataTable.AsEnumerable().Where(Function(x) x.Field(Of String)("STATE") = "Active").FirstOrDefault()("USERNAME").ToString().Replace(">", "")
End Using
End Function
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim args = Environment.GetCommandLineArgs()
Dim psi = New ProcessStartInfo() With {
.FileName = args(0),
.UseShellExecute = True,
.Verb = "runas"
}
Process.Start(psi)
Environment.Exit(0)
End Sub
End Class
Ở trong source code này mình cũng đã tích hợp cách chạy lại ứng dụng dưới quyền Administrator.
Thanks for watching!