Więc mam następujący kod:C# mutex w trybie zwolnienia zachowuje się inaczej niż w trybie debugowania
...
private static void Main(string[] args)
{
string file=DateTime.Now.ToFileTime().ToString();
File.AppendAllText(file, "Mutex\r\n");
bool CreatedNew;
Mutex mutex=new Mutex(true, AppDomain.CurrentDomain.FriendlyName, out CreatedNew);
if(CreatedNew)
{
#if DEBUG
File.AppendAllText(file, "Launching in DEBUG mode\r\n");
#else
File.AppendAllText(file, "Launching in RELEASE mode\r\n");
#endif
//Program.Launch();
Program.ProcessArgsAndLaunch(args);
}
else
{
File.AppendAllText(file, "Handling dupe\r\n");
Program.HandleDuplicate();
}
}
...
Sprawdziłem niezliczone artykuły tutaj i innych miejsc bez powodzenia.
Zasadniczo kod sprawdza działającą instancję aplikacji, a jeśli takowa istnieje, przechodzi do głównego okna uruchomionej aplikacji. Jeśli nie, uruchamia aplikację.
W trybie Debug
wszystko działa zgodnie z oczekiwaniami, problem rozpoczyna się po zmianie konfiguracji na Release
: aplikacja zawsze się uruchamia (z Mutex
pozornie nie robi nic).
Dodałem warunkowo skompilowane zrzuty, które pokazują, w którym trybie aplikacja się uruchamia, a wyniki zmieniają się w zależności od konfiguracji, ale niestety tak samo postępuje aplikacja.
To może być race condition
, ale nie jestem pewien.
Więcej kodu zostanie wysłany w razie potrzeby.
Dzięki.
Wielkie dzięki Jon, to był problem. Jak tylko umieściłem swój kod w instrukcji 'using', wszystko działało. I masz rację, nie potrzebowałem zmiennej ... – nurchi