0

我有一个具有录音和通话功能的 UWP 应用。为此,我添加了两个使用桌面桥应用程序的 FullTrust 应用程序。当我只调用一个 fullTrust 应用程序时,一切正常,但是当我通过传递参数(要启动的 FullTrust 应用程序)调用两个 FullTrust 应用程序时,启动的第一个应用程序行为不正确。对于这两个 FullTrust 应用程序,我使用了在 Windows 打包项目的 Package.Manifest 文件中声明的两个不同的 Appservice 名称。

我注意到,每当我切换 Fulltrust 应用程序调用的位置时,最后一个被调用的应用程序始终保持活动状态(具有 Appservice 连接的优先级),即使两者具有不同的应用程序服务名称。

这是我在用户在 UWP 中打开一个启动 Win32 应用程序和后台应用程序的页面时添加的代码

if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0)) { await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync("Win32"); } if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0)) { 等待 FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync("Background"); }

在上面的代码中,第一个启动的应用程序调用我的 Win32.exe 和第二个 background.exe。

如何独立调用这两个应用程序?每当我们想要启动它们并在需要时关闭或将来可能会关闭时,我想同时启动两个应用程序,但我可能需要在需要时关闭任何应用程序。谁能告诉我在同时调用两个 fullTrust 应用程序时如何处理正确的通信路径?

4

1 回答 1

0

如何独立调用这两个应用程序?

对于启动多个桌面应用程序,我们建议让Launcher应用程序管理多个应用程序,然后调用LaunchFullTrustProcessForCurrentAppAsync(string parameterGroupId)并传递GroupId参数。首先,我们需要在桌面桥 appxmanifes 文件中添加组。

<Extensions>
  <desktop:Extension Category="windows.fullTrustProcess" Executable="Launcher\Launcher.exe">
    <desktop:FullTrustProcess>
      <desktop:ParameterGroup GroupId="Background" Parameters="/background" />  
      <desktop:ParameterGroup GroupId="Win32" Parameters="/win32" />
    </desktop:FullTrustProcess>
  </desktop:Extension>
</Extensions>

然后使用Launcher参数启动所有应用程序

static void Main(string[] args)
{
    // determine the package root, based on own location
    string result = Assembly.GetExecutingAssembly().Location;
    int index = result.LastIndexOf("\\");
    string rootPath = $"{result.Substring(0, index)}\\..\\";

    // process object to keep track of your child process
    Process newProcess = null;

    if (args.Length > 2)
    {
        // launch process based on parameter
        switch (args[2])
        {
            case "/background":
                newProcess = Process.Start(rootPath + @"FullTrust_Background\FullTrust_Background.exe");
                break;

            case "/win32":
                newProcess = Process.Start(rootPath + @"FullTrust_Win32\FullTrust_Win32.exe");
                break;             

        }
    }
}

有关更多详细信息,请参阅本教程

于 2019-11-26T07:28:28.180 回答