Tek bir uygulama örneğinin bir başka yolu, karma miktarlarını kontrol etmektir. Muteksleri ile karıştırmasını sonra ben bu şekilde çalışma var, (i istediğiniz gibi işe yaramadı):
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
public Main()
{
InitializeComponent();
Process current = Process.GetCurrentProcess();
string currentmd5 = md5hash(current.MainModule.FileName);
Process[] processlist = Process.GetProcesses();
foreach (Process process in processlist)
{
if (process.Id != current.Id)
{
try
{
if (currentmd5 == md5hash(process.MainModule.FileName))
{
SetForegroundWindow(process.MainWindowHandle);
Environment.Exit(0);
}
}
catch (/* your exception */) { /* your exception goes here */ }
}
}
}
private string md5hash(string file)
{
string check;
using (FileStream FileCheck = File.OpenRead(file))
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] md5Hash = md5.ComputeHash(FileCheck);
check = BitConverter.ToString(md5Hash).Replace("-", "").ToLower();
}
return check;
}
o işlem kimliği sadece md5 toplamlarını kontrol eder. Bu uygulamanın bir örneği bulunursa, çalışan uygulamaya odaklanır ve kendi kendiliğinden çıkarsa
.
Yeniden adlandırabilir veya dosyanızla istediğiniz şeyi yapabilirsiniz. md5 hash aynı ise iki kez açılmaz.
Bunu tavsiye eden biri olabilir mi? Cevabını biliyorum, ama belki bir kişi muteks alternatifi arıyor.
MainWindowHandle özelliğini bu yolla (yalnızca yeni keşfettiğim gibi) kullanmayla ilgili biraz FYI: "İlişkili işlem bir ana pencereye sahip değilse, * MainWindowHandle değeri sıfırdır *. * Değeri de sıfırdır * için gizlenen süreçler, yani görev çubuğunda görünmeyen işlemler. Bu, bildirim alanında, görev çubuğunun en sağında simgeler olarak görünen işlemler için geçerli olabilir. " –
İyi cevap. SetForegroundWindow'un kabul cevabı üzerinden (bu bağlantıyı izledikten sonra bir sonraki bağlantının ne olduğunu izlerseniz) yayın mesajını kullanan ve pencereyi en üst noktaya zorlayan bir pencere açarım. Bu cevap, yeni çalışan sürecin, çoğu durumda odağı başka bir sürece geçirme haklarına sahip olması gerektiğidir. – eselk
SetForegroundWindow benim için çalışmıyor. Asla işe yaramadı. –