0
.net 4.5 및 Main 클래스의 뮤텍스를 사용하여 단일 인스턴스 WinForm 응용 프로그램을 개발했습니다. 일부 사용자는 뮤텍스가 이미 사용 되었기 때문에 응용 프로그램을 시작할 수 없다고보고합니다.단일 인스턴스 응용 프로그램이 시작되지 않음
static string guid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), true)[0]).Value + "-OrientalWave";
public static string GUID { get { return guid; } }
[STAThread]
static void Main(string[] args)
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler);
// Single Instance Check
bool createdNew;
using (var mutex = new Mutex(true, guid, out createdNew))
{
if (createdNew)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (args.Length > 0)
{
string filename = args[0];
Application.Run(new frmMain(filename));
}
else
Application.Run(new frmMain());
}
else
{
if (args.Length > 0)
{
// If i want to open a file
string filename = args[0];
NamedPipesClient pipeClient = new NamedPipesClient();
pipeClient.Start();
pipeClient.SendMessage(filename);
pipeClient.Stop();
}
else
MessageBox.Show("Only single instance allowed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs args)
{
try
{
var exception = (Exception)args.ExceptionObject;
MessageBox.Show(exception.Message, null, MessageBoxButtons.OK, MessageBoxIcon.Error);
Logger.Write(Logger.LogType.Error, exception.Source, "Message: " + exception.Message + " - Stack: " + exception.StackTrace);
}
catch { }
Environment.Exit(0);
}
단일 인스턴스 응용 프로그램을 만들지 만 성공하지 못했던 대안이나 대안을 웹에서 검색했습니다.
앱의 기능 것을 만들어 유사한 사용 사례를 찾을 수 있습니다. 이 휠을 다시 발명하는 것을 피하십시오. 이미 프레임 워크에서 지원됩니다. 항상 수십만 명의 프로그래머들에 의해 훼손되어 매일 수백만 번 테스트되는 코드를 선호합니다. https://stackoverflow.com/a/29260770/17034 –
제 의견으로는이 코드는 예상대로 작동해야합니다 ... – Legends