我在WPF中创建了一个小程序。当我运行我的exe文件时,它将正确打开我的应用程序。但是,当我再次运行我的exe时,它会打开另一个时间。我只想运行一次。
我在解决方案中搜索了这个问题,我得到了一些代码:
System.Diagnostics.Process.GetCurrentProcess().Kill();
此代码将关闭所有应用程序。但是,我需要的是当我一次又一次地运行我的exe时,只会有一个应用程序实例。
答案 0 :(得分:0)
如果我理解正确,您希望应用程序在再次打开同一个文件时只打开一次。
执行此操作的方法不是通过终止进程(可能损坏文件),而是通过立即关闭新打开的应用程序。
保留一个打开文件列表,其中包括中心(注册表,文件)以及应用程序启动时检查文件是否已在列表中。如果它是关闭刚刚开始的应用程序。
您可以尝试添加一些代码,将包含所请求文件的应用程序放到桌面顶部。
答案 1 :(得分:0)
您可以使用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...
}
}