【问题标题】:How to launch a Windows Universal App from winform如何从 winform 启动 Windows 通用应用程序
【发布时间】:2017-06-12 17:52:54
【问题描述】:

我正在尝试使用以下代码从我的 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();

【问题讨论】:

    标签: c# .net windows uwp windows-10-universal


    【解决方案1】:

    你可以register the app for the URI scheme然后激活它。在应用程序中,您必须处理 OnActivated 事件。

    至于更多信息this MSDN pagethis SO answer 可能会有所帮助。

    【讨论】:

      【解决方案2】:

      你可以使用Automate launching Windows 10 UWP apps

      "C:\Program Files (x86)\Windows Kits\10\App Certification Kit\microsoft.windows.softwarelogo.appxlauncher.exe" MyPackageName_ph1m9x8skttmg!AppId
      

      MyPackageName_ph1m9x8skttmg 是 UWP 应用的 Package family nameAppId 是 Package.appxmanifest 文件中 <Applications> xml 元素下的 Application Id

      【讨论】:

      • Windows 工具包可供那些安装了 Windows SDK 进行开发的用户使用。它没有在非开发者笔记本电脑上显示
      • 这个命令拯救了我的一天,虽然我很难获得应用程序 ID。我们可以从 UWP 项目 Package.apxmanifest -> Package tab -> Package Family Name 中获取它。或者运行 power-shell 命令 get-StartApps | Where-Object {$_.Name -like 'appname'}
      【解决方案3】:

      你真的有两个问题:

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

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

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

      您在命令行中使用的 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();
      

      既然是人脉应用defines a documented protocol,最好以这种方式启动它。这也可以让我们选择我们想要的联系人:

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

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

      IApplicationActivationManager::ActivateApplication in C#? 有一个关于使用 C# 中的 IApplicationActivationManager 的 stackoverflow Q/A

      【讨论】:

      • 如果 Powershell 在当前用户的机器中被阻止并且仅对管理员用户可用,这是否可行?
      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多