2013-06-18 21 views
5

Tek bir sunucuda barındırılan bir uygulama geliştirdim. Birçok kullanıcı Uzak Masaüstü bağlantısı üzerinden ona erişebilir, ancak bazen aynı kullanıcının 2-x örnekleri açtığını görev yöneticisinde gördüm. Aynı kullanıcının birden fazla örneği açmasını engellemeliyim. Ancak programın farklı kullanıcılar tarafından birçok kez açılabileceğini unutmayın. Lütfen ingilizcemi affedin. Teşekkürler.Sunucuda aynı örnek adında birden çok örneği engelle

PS: Ben Win kullanıyorum ve C#

+0

'u arayın Çalışan işlemlerin listesini kolayca alabilirsiniz. Daha sonra, sürecin sahibi olmak için buna bir göz atın: http://stackoverflow.com/questions/300449/how-do-you-get-the-username-of-the-owner-of-a-process – Dilshod

+0

@ Kullanırken makinede yönetici değilse, o kadar kolay olmayabilir Dilshod * Uzak Masaüstü * – I4V

cevap

2

Kullanıcının adını taşıyan bir muteksi oluşturabilirsiniz.

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

Temiz bir çözüm, ancak kullanıcının tekrar açmaya çalıştığı açılan formu göstermek için herhangi bir yolu var mı? –

+0

@ymorales Başka bir soru, daha sonra geribildirimlerimi alabilir. – I4V

+1

Muhtemelen mevcut örnek içinde değil, tüm terminal sunucusu oturumlarında görüldüğünden emin olmak için mutex ismini @ "Global \" ile öneklemelisiniz. Ve zmbq'nin işaret ettiği gibi, kod örneğinizi kullanabilecek başka yazılımlarla çarpışmaları önlemek için muhtemelen uygulamanın adını eklemelisiniz. – EricLaw

1

Uygulamanızın başka bir örneğinin halihazırda çalışıp çalışmadığını görmek için önerilen yöntem bir Mutex kullanmaktır. Örneğin, here.

Farklı kullanıcılar çalıştırıyorsa, uygulamanın birden çok örneğinin çalışmasına izin vermek istediğinizden, yalnızca geçerli kullanıcı adını muteks adına ekleyin. Örneğin, Mutex "MyApp"+Environment.UserName

İlgili konular