我在 WPF 中创建了一个小程序。当我运行我的 exe 文件时,它将正确打开我的应用程序。但是,当我再次运行我的 exe 时,它会再次打开。我只希望它运行一次。
我搜索了这个问题的解决方案,我得到了一些这样的代码:
System.Diagnostics.Process.GetCurrentProcess().Kill();
此代码将关闭所有应用程序。但是,我需要的是,当我一次又一次地运行我的 exe 时,将只有一个应用程序实例。
我在 WPF 中创建了一个小程序。当我运行我的 exe 文件时,它将正确打开我的应用程序。但是,当我再次运行我的 exe 时,它会再次打开。我只希望它运行一次。
我搜索了这个问题的解决方案,我得到了一些这样的代码:
System.Diagnostics.Process.GetCurrentProcess().Kill();
此代码将关闭所有应用程序。但是,我需要的是,当我一次又一次地运行我的 exe 时,将只有一个应用程序实例。
如果我理解正确,您希望应用程序在再次打开同一个文件时只打开一次。
这样做的一种方法不是杀死一个进程(这可能会损坏文件),而是立即关闭新打开的应用程序。
将打开的文件列表保留在中心位置(注册表、文件),并在应用程序启动时检查文件是否已经在列表中。如果它关闭新启动的应用程序。
您可以尝试添加一些代码,将包含所请求文件的应用程序带到桌面顶部。
您可以使用Mutex类。
使用Mutex
它非常简单明了。
using System;
using System.Threading;
public class Test
{
public static void Main()
{
// Set this variable to false if you do not want to request
// initial ownership of the named mutex.
bool requestInitialOwnership = true;
bool mutexWasCreated;
// Request initial ownership of the named mutex by passing
// true for the first parameter. Only one system object named
// "MyMutex" can exist; the local Mutex object represents
// this system object. If "MyMutex" is created by this call,
// then mutexWasCreated contains true; otherwise, it contains
// false.
Mutex m = new Mutex(requestInitialOwnership,
"MyMutex",
out mutexWasCreated);
// This thread owns the mutex only if it both requested
// initial ownership and created the named mutex. Otherwise,
// it can request the named mutex by calling WaitOne.
if (!(requestInitialOwnership && mutexWasCreated))
{
// The mutex is already owned by another application instance.
// Close gracefully.
// Put your exit code here...
// For WPF, this would be Application.Current.Shutdown();
// (Obviously, that would not work in this Console example.. :-) )
}
// Your application code here...
}
}