C# 如何检查并杀死应用程序的另一个实例?

C# 如何检查并杀死应用程序的另一个实例?,c#,windows-runtime,windows-store-apps,kill-process,C#,Windows Runtime,Windows Store Apps,Kill Process,我面临的问题是,我的客户已经在运行应用程序appA。然后,他们转到桌面(而不是杀死appA),并通过使用PowerShell运行appA.ps1升级应用程序的版本。之后,在安装后单击appA->获取异常。我想根本原因是另一个实例正在运行 我的问题是如何检查我的应用程序是否已经运行?我能杀了它吗? 另外,我的应用程序是windows 8应用商店,c#。来自: 所有Metro风格的应用程序都在高度沙盒化的环境中工作,无法直接启动外部应用程序 您无法访问windows应用程序进程。很遗憾,您无法检查是

我面临的问题是,我的客户已经在运行应用程序appA。然后,他们转到桌面(而不是杀死appA),并通过使用PowerShell运行appA.ps1升级应用程序的版本。之后,在安装后单击appA->
获取异常。我想根本原因是另一个实例正在运行

我的问题是如何检查我的应用程序是否已经运行?我能杀了它吗?

另外,我的应用程序是windows 8应用商店,c#。

来自:

所有Metro风格的应用程序都在高度沙盒化的环境中工作,无法直接启动外部应用程序

您无法访问windows应用程序进程。很遗憾,您无法检查是否正在运行windows应用程序

到目前为止,我还没有找到别的办法


没有地铁风格的应用程序

首先,您需要以下流程:

var processes = Process.GetProcessesByName("your application name")
foreach (var process in processes)
{
    process.CloseMainWindow();

    // OR more aggressive:
    process.Kill();
}
要检查您的程序是否已在运行,请执行以下操作:

var isRunning = processes.Length > 1;
然后循环浏览它们并关闭流程:

var processes = Process.GetProcessesByName("your application name")
foreach (var process in processes)
{
    process.CloseMainWindow();

    // OR more aggressive:
    process.Kill();
}

如果您希望保持当前实例运行并杀死应用程序的所有其他实例,可以执行以下操作:

 using namespace System.Diagnostics;

 ...

 // get current process
 Process current = Process.GetCurrentProcess();
 // get all the processes with currnent process name
 Process[] processes = Process.GetProcessesByName(current.ProcessName);
 
 foreach (Process process in processes)
 {
     //Ignore the current process  
     if (process.Id != current.Id)
     {
        process.Kill();
     }
 }

谢谢你的回答。您能告诉我Windows 8应用商店中进程的哪些首选项吗?如何在Visual Studio 2013上添加此首选项?抱歉,目前我使用的是Win 7系统。您确定不能用这种方式捕获win8 store进程吗?是的,win8 store不能用这种方式捕获进程。@thanhzusu我更新了我的答案。很遗憾,这是不可能的。您确定异常是由侧面加载的升级引起的吗?发生了什么例外?