如何从 winform 启动 Windows 通用应用程序

Nav*_*san 6 .net c# windows uwp windows-10-universal

我正在尝试使用以下代码从我的 winform 运行 Windows 通用应用程序,但不幸的是它打开了文档文件夹。我是 UWP 应用程序开发的新手。这是启动 UWP 应用程序的正确方法吗?

Process p = new Process();
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = "explorer.exe";
            startInfo.Arguments = @"shell:appsFolder\Microsoft.SDKSamples.CameraAdvancedCapture.CS_8wekyb3d8bbwe!App";
            p.StartInfo = startInfo;
            p.Start();
Run Code Online (Sandbox Code Playgroud)

Rob*_*SFT 10

你真的有两个问题:

  1. 如何从 WinForms 应用程序启动协议
  2. 如何正确启动 UWP 应用。

要从 WinForms 应用程序启动协议,请使用带有UseShellExecute = true的 Process 对象。不要尝试使用 Explorer.exe 作为进程启动它。

启动应用程序的最佳方式是通过协议,只要应用程序定义了一个。如果您控制该应用程序,那么您可以定义一个协议,如@Romasz 所示:处理 URI 激活

您在命令行中使用的 shell:appsFolder 技巧是一个方便的脚本技巧,但没有记录或保证。不要发布依赖于它的代码。

一旦你有了一个协议,你就可以用 Process.Start 启动它:

这是启动 People 应用程序的 shell hack:

Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.FileName =  startInfo.FileName =  @"shell:appsFolder\Microsoft.People_8wekyb3d8bbwe!App";
p.StartInfo = startInfo;
p.Start();
Run Code Online (Sandbox Code Playgroud)

由于 People 应用定义了一个文档化的协议,所以最好以这种方式启动它。这也可以让我们选择我们想要的联系人:

Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.FileName = @"ms-people:viewcontact?PhoneNumber=8675309";
p.StartInfo = startInfo;
p.Start();
Run Code Online (Sandbox Code Playgroud)

启动未定义协议的 UWP 应用的正确方法是使用 IApplicationActivationManager。这是 shell 将在内部使用的内容,它可以让您更好地控制要启动的内容和方式。

在 C# 中的IApplicationActivationManager::ActivateApplication 中是否有关于使用 C# 中的IApplicationActivationManager的 stackoverflow 问答

  • 如果 Powershell 在当前用户的计算机中被阻止并且仅对管理员用户可用,这会起作用吗? (2认同)

Rom*_*asz 0

您可以为 URI 方案注册应用程序,然后激活它。在应用程序内部,您必须处理OnActivated事件。

至于更多信息,这个 MSDN 页面这个 SO 答案可能会有所帮助。