1

我正在创建的应用程序包含一个通知图标,它在后台保持活跃(嗯,有点)。问题是当用户点击我的应用程序的图标时,应用程序将再次启动,所以我有两个通知图标和两个后台活动以及两个所有内容。如果用户再次单击该图标,将出现所有这些内容中的三个......所以我应该以某种方式阻止它。我有一种设置标志并将其值设置为注册表的想法,当我的应用程序想要启动时,在表单加载事件中,通过读取值来终止应用程序。但我想要一种更……专业的方式来处理它。例如根本没有启动。

4

2 回答 2

1

创建您的应用程序创建的某种形式的全局互斥/事件句柄,然后在打开的例程中检查它是否存在,如果存在,则退出启动路由。

在我给出的这个答案中,我有一些基本代码(针对不同的问题),但它演示了您正在尝试做什么。

Openexisting 全局互斥体上的 UnauthorizedAccessException

于 2013-03-03T14:07:58.487 回答
1

这是来自这个答案,这是这个答案的副本。您在应用程序的入口构造函数中检查应用程序是否已经在运行。

static void Main() 
{
    Process currentProcess = Process.GetCurrentProcess();
    var runningProcess = (from process in Process.GetProcesses()
                          where
                            process.Id != currentProcess.Id &&
                            process.ProcessName.Equals(
                              currentProcess.ProcessName,
                              StringComparison.Ordinal)
                          select process).FirstOrDefault();
    if (runningProcess != null)
    {
        ShowWindow(runningProcess.MainWindowHandle, SW_SHOWMAXIMIZED);
       return; 
    }
}
于 2013-03-03T14:13:20.530 回答