2013-06-18 13 views
5

Opracowałem aplikację hostowaną na jednym serwerze. Wielu użytkowników uzyskuje do niego dostęp za pośrednictwem połączenia pulpitu zdalnego, ale czasami widziałem w menedżerze zadań, że ten sam użytkownik otworzył 2-x wystąpienia. Potrzebuję zapobiec temu samemu użytkownikowi nie można otworzyć wielu wystąpień. Ale zauważ, że program może być otwierany wiele razy przez różnych użytkowników. Proszę, wybacz mi mój angielski. Dzięki.Zapobieganie wielu instancjom na serwerze o tej samej nazwie użytkownika

PS: Używam WinForms i C#

+0

Możesz łatwo uzyskać listę uruchomionych procesów. Następnie zapoznaj się z tym, aby uzyskać własność procesu: http://stackoverflow.com/questions/300449/how-do-you-get-the-username-of-the-owner-of-a- proce – Dilshod

+0

@ Dilshod to może nie być takie proste, jeśli użytkownik nie jest administratorem komputera podczas korzystania z * Remote Desktop * – I4V

Odpowiedz

2

Można utworzyć mutex z nazwą użytkownika.

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

Czyste rozwiązanie, ale czy istnieje sposób na pokazanie otwartego formularza, który użytkownik próbuje otworzyć ponownie? –

+0

@ymorales Kolejne pytanie może uzyskać lepsze informacje zwrotne niż moje komentarze. – I4V

+1

Powinieneś prawdopodobnie poprzedzić nazwę mutex przez @ "Global \", aby upewnić się, że jest widoczna we wszystkich sesjach serwera terminali, a nie tylko w bieżącej instancji. I jak wskazuje zmbq, prawdopodobnie powinieneś dołączyć nazwę aplikacji, aby uniknąć kolizji z innym oprogramowaniem, które może użyć próbki kodu. – EricLaw

1

Zalecanym sposobem sprawdzenia, czy inna instancja aplikacji już działa, jest użycie Mutex. Zobacz na przykład here.

Ponieważ chcesz zezwolić na uruchamianie wielu wystąpień aplikacji, jeśli uruchamiają je różni użytkownicy, po prostu dodaj bieżącą nazwę użytkownika do nazwy muteksu. Na przykład, zadzwoń pod Mutex "MyApp"+Environment.UserName

Powiązane problemy