Tôi có một ứng dụng cần phải là một ứng dụng đơn lẻ trên tất cả các phiên người dùng trên PC Windows. Nghiên cứu của tôi cho đến nay đã tập trung xung quanh bằng cách sử dụng một mutex để thực hiện điều này, nhưng tôi có một vấn đề mà tôi không chắc chắn thực sự là một vấn đề, đây thực sự là một câu hỏi thực hành tốt nhất tôi tin.VB6: Ứng dụng đơn lẻ trên tất cả các phiên người dùng
Dưới đây là các mã đầu tiên của tất cả:
Private Const AppVer = "Global\UNIQUENAME" ' This is not what i am using but the name is unique
Public Sub Main()
Dim mutexValue As Long
mutexValue = CreateMutex(ByVal 0&, 1, AppVer)
If (Err.LastDllError = ERROR_ALREADY_EXISTS) Then
SaveTitle$ = App.Title
App.Title = "... duplicate instance."
MsgBox "A duplicate instance of this program exists."
CloseHandle mutexValue
Exit Sub
End If
' Else keep on truckin'
Bây giờ, dựa trên this bài viết Tôi tin rằng tôi hiểu rằng bằng cách thông qua con trỏ NULL đến chức năng CreateMutex như tôi ở trên tôi về cơ bản gán bất cứ mô tả bảo mật được liên kết với người dùng hiện đã đăng nhập. Nếu điều đó có nghĩa là những gì tôi nghĩ (tôi có thể cần thêm hướng dẫn tại đây) cho tôi biết rằng những người dùng khác đăng nhập sẽ không thể "nhìn thấy" mutex được tạo trong phiên của người dùng ban đầu, cũng như họ sẽ không có thể tạo một mutex có cùng tên.
Hiện tại, bằng chứng về hoàng đế dường như đã phản hồi điều này. Tôi đã sử dụng một hộp thông báo để bật "LastDLLError" mà tôi nhận được và khi một người dùng khác cố gắng khởi chạy ứng dụng (trong khi nó đang chạy dưới một tài khoản người dùng khác), tôi sẽ nhận được một mã ERROR_ACCESS_DENIED. Tôi đồng ý với thử nghiệm chống lại điều này cùng với mã ERROR_ALREADY_EXISTS và chỉ thoát trên một trong hai hoặc. Tuy nhiên, điều này cảm thấy loại hackish và tôi tự hỏi nếu ai đó có thể đề xuất một thay thế. Điều "đúng" cần làm là chuyển con trỏ thích hợp đến hàm CreateMutex sao cho bất kỳ người dùng nào có quyền thích hợp để xem bất kỳ mutexes hiện có nào (mutices?), Nhưng tôi không chắc chắn điều này là có thể nếu không có hiện tại người dùng đã đăng nhập là quản trị viên (không được chấp nhận). Bất kỳ hỗ trợ/hướng dẫn nào được đánh giá cao. Cảm ơn trước!
Cảm ơn mọi người đã phản hồi.Tôi sẽ sửa đổi mã của tôi để hành xử giống như mã trong lớp của Joe, ứng dụng thử nghiệm đi kèm với nó xác nhận rằng tôi sẽ có thể làm cho nó hoạt động. Đóng cái này ra. –