Я столкнулся с несколько похожей ситуацией, но я проверял, запущено ли приложение, и если нет, запустите его.В моей ситуации приложение, которое я хотел проверить и запустить, не было чем-то, что я написал, и не было UWP, поэтому мое решение может не сработать для вас, поскольку возможности для этого ограничены.
Сначала добавьте ограниченные возможности вpackage.appxmanifest (code).
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap"
Затем добавьте в приложение возможность «appDiagnostics».
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="appDiagnostics" />
</Capabilities>
Теперь у вас есть возможность запросить разрешение на доступ к запущенным процессам и проверку.
using System;
using System.Linq;
using System.Threading.Tasks;
using Windows.System;
using Windows.System.Diagnostics;
class ProcessChecker
{
public static async Task<bool> CheckForRunningProcess(string processName)
{
//Requests permission for app.
await AppDiagnosticInfo.RequestAccessAsync();
//Gets the running processes.
var processes = ProcessDiagnosticInfo.GetForProcesses();
//Returns result of searching for process name.
return processes.Any(processDiagnosticInfo => processDiagnosticInfo.ExecutableFileName.Contains(processName));
}
}
Запуск приложения / процесса без UWP немного грязный, но возможный.
Во-первых, требуется простое консольное (не UWP) приложение.Замените directoryPath в приведенном ниже коде подходящим путем к каталогу.
using System;
using System.Diagnostics;
namespace Launcher
{
class Program
{
static void Main(string[] args)
{
try
{
if (args.Length != 3) return;
string executable = args[2];
string directoryPath = "C:\\Program Files (x86)\\Arduino\\hardware\\tools\\";
Process.Start(directoryPath + executable);
}
catch (Exception e)
{
Console.ReadLine();
}
}
}
}
Создайте консольное приложение и поместите Launcher.exe в папку ресурсов вашего приложения UWP.
Теперь вам нужно добавитьвозможность запускать Launcher и делать это, добавить возможность «runFullTrust» в приложение UWP.
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
<rescap:Capability Name="appDiagnostics" />
</Capabilities>
Для настольных компьютеров также необходимо добавить возможности рабочего стола и расширение в package.appxmanifest (код).
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
IgnorableNamespaces="uap mp rescap"
Затем, ниже, в package.appxManifest и внутри.
<Extensions>
<desktop:Extension Category="windows.fullTrustProcess" Executable="Assets\Launcher.exe" >
<desktop:FullTrustProcess>
<desktop:ParameterGroup GroupId="SomeGroup1" Parameters="ProcessName1.exe"/>
<desktop:ParameterGroup GroupId="SomeGroup2" Parameters="ProcessName2.exe"/>
</desktop:FullTrustProcess>
</desktop:Extension>
</Extensions>
Наконец, добавьте ссылки «Расширения рабочего стола Windows для UWP», необходимые для версий вашего приложения.
Теперь вы можете позвонить в Launcher и запустить необходимый процесс.
public static async void LaunchProcess(int groupId)
{
switch (groupId)
{
case 1:
await FullTrustProcessLauncher.LaunchFullTrustProcessForAppAsync("SomeGroup1");
break;
case 2:
await FullTrustProcessLauncher.LaunchFullTrustProcessForAppAsync("SomeGroup2");
break;
}
}
Комбинируя вышесказанное, одна из возможностей может быть ...
public enum ProcessResult
{
ProcessAlreadyRunning,
FailedToLaunch,
SuccessfulLaunch
}
public static async Task<ProcessResult> CheckLaunchCheckProcess1()
{
if (await CheckForRunningProcess("ProcessName1.exe")) return ProcessResult.ProcessAlreadyRunning;
LaunchProcess(1);
return await CheckForRunningProcess("ProcessName1.exe") ? ProcessResult.SuccessfulLaunch : ProcessResult.FailedToLaunch;
}
Это всего лишьпример того, как выполнить запуск приложений, не относящихся к uwp, в одном приложении uwp.Для представлений приложений из магазина Windows ограниченные возможности требуют одобрения и могут задержать или остановить развертывание в случае отказа.
Если и вызывающее приложение, и запускающее приложение являются uwp и написаны вами, подходящее решение может использовать URI длясвязь между приложениями, MS doc link Запуск приложения с URI