2013-06-18 21 views
5

Tôi đã phát triển một ứng dụng được lưu trữ trong một máy chủ. Nhiều người dùng truy cập vào nó thông qua kết nối Remote Desktop, nhưng đôi khi tôi thấy trong trình quản lý tác vụ mà cùng một người dùng đã mở các cá thể 2 x. Tôi cần ngăn chặn rằng cùng một người dùng không thể mở nhiều phiên bản. Nhưng lưu ý rằng chương trình có thể được mở nhiều lần bởi những người dùng khác nhau. Hãy tha thứ cho tôi tiếng Anh của tôi. Cảm ơn.Ngăn nhiều phiên bản trong cùng một tên người dùng máy chủ

PS: Tôi đang sử dụng Winforms và C#

+0

Bạn có thể dễ dàng lấy danh sách các quy trình đang chạy. Sau đó, hãy xem điều này để có được chủ sở hữu của quy trình: http://stackoverflow.com/questions/300449/how-do-you-get-the-username-of-the-owner-of-a-process – Dilshod

+0

@ Dilshod có thể không quá dễ dàng nếu người dùng không phải là quản trị viên trong máy khi sử dụng * Remote Desktop * – I4V

Trả lời

2

Bạn có thể tạo một mutex với tên của người dùng.

bool b = true; 
Mutex mutex = new Mutex(true, Environment.UserName.ToLowerInvariant() , out b); 
if (!b) throw new InvalidOperationException("Another instance is running"); 
+0

Giải pháp làm sạch, nhưng có cách nào để hiển thị biểu mẫu đã mở mà người dùng đang cố gắng mở lại không? –

+0

@ymorales Một câu hỏi khác có thể nhận được phản hồi tốt hơn sau đó là nhận xét của tôi. – I4V

+1

Có lẽ bạn nên đặt tiền tố tên mutex với @ "Global \" để đảm bảo rằng nó được nhìn thấy trên tất cả các phiên máy chủ đầu cuối thay vì chỉ trong phiên bản hiện tại. Và như zmbq chỉ ra, bạn có lẽ nên bao gồm tên của ứng dụng để tránh xung đột với các phần mềm khác có thể sử dụng mẫu mã của bạn. – EricLaw

1

Cách được khuyến nghị để xem liệu một ứng dụng khác của bạn có đang chạy hay không là sử dụng Mutex. Xem ví dụ here.

Vì bạn muốn cho phép nhiều phiên bản của ứng dụng chạy nếu người dùng khác nhau chạy chúng, chỉ cần thêm tên người dùng hiện tại vào tên của mutex. Ví dụ: hãy gọi cho Mutex "MyApp"+Environment.UserName

Các vấn đề liên quan