3

每当我们想使用 Speaker 进行录音时,我们都需要与桌面应用程序进行通信,但每次我们想要访问扬声器代码或扬声器和麦克风时,它都需要调用以下代码。

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

上述代码访问 Recorder.exe 并使用 Appservice (com.recorder.service) 创建与桌面应用程序的通信管道。但是,每当我们启动 FulltrustProcesslauncher 时,它每次都会在任务管理器中为 Recorder 应用程序创建新实例,并且之前创建的实例没有被使用,并且仍然列在任务管理器中的 UWP 应用程序下。

我的问题是:有没有一种方法,我们既可以使用以前创建的 Recorder 应用程序实例,也可以在使用 OnBackgroundActivated 和 StartProcess() 方法创建与 Recorder 应用程序的新连接时终止旧实例?我注意到在任务管理器中两个 Recorder.exe 都分配了唯一的 ID。因此,似乎每当我们启动 FullTrustProcessLauncher 时,都会为 Recorder 应用程序分配一个新的 Id,并且它不会识别旧的 Recorder 应用程序。

我尝试过的事情是:我创建了一个全局变量并将其设置为 1,当我第一次启动 FullTrustProcessLauncher 和下次尝试访问 Recorder 应用程序时,我跳过了 StartProcess() 方法。但这带来了另一个问题,您的代码没有记录。我还在 RecorderApp 中创建了一种方法,以便在不需要时退出 Recorder 应用程序。但我得到一个异常:未设置对象引用。在 Packager 项目的包清单文件中,我添加了 a:SupportsMultipleInstances=false 希望它不会创建多个实例,但这似乎也不起作用

4

0 回答 0