C# 通过UWP中的自定义URI执行应用程序

C# 通过UWP中的自定义URI执行应用程序,c#,uwp,C#,Uwp,更新:通过添加“:“在调用app3时,我不再收到错误,但应用程序仍未启动,而是收到一条错误消息,告诉我需要一个新应用程序来打开app3,我如何解决此问题?”?为什么我不能直接打开应用程序 我有一个applicationapp3,它除了打开一个空白页之外什么都不做 从另一个应用程序app4我正在尝试调用app3 public MainPage() { this.InitializeComponent(); callUri(); } pri

更新:通过添加“:“在调用app3时,我不再收到错误,但应用程序仍未启动,而是收到一条错误消息,告诉我需要一个新应用程序来打开app3,我如何解决此问题?”?为什么我不能直接打开应用程序

我有一个application
app3
,它除了打开一个空白页之外什么都不做

从另一个应用程序
app4
我正在尝试调用
app3

public MainPage()
    {
        this.InitializeComponent();
        callUri();

    }

    private async void callUri()
    {
        var uriBing = new Uri(@"app3");

        // Launch the URI
        var success = await Windows.System.Launcher.LaunchUriAsync(uriBing);
    }
但是我收到了错误信息:

System.UriFormatException:“无效的URI:无法确定URI的格式。”


我到底做错了什么?用于URI处理的Windows文档实际上不知道如何调用自定义URI,只知道它们的预制URI,我没有看到任何其他与此相关的问题。App3软件包已经创建

如果希望使用协议(称为协议,即:yourappname://)启动应用程序,则需要在appxmanifest声明中定义它。就像你在应用程序中所做的一样。然后,您可以使用应用程序名和冒号(app://)来调用它

现在,一旦通过协议启动,你的应用程序就不会进入默认页面,你只会看到一个空白页面。您需要在App.xaml.cs中的OnActivated方法中处理它,您需要重写该方法并处理协议激活

  protected override void OnActivated(IActivatedEventArgs args)
  {
      if (args.Kind == ActivationKind.Protocol)
      {
         ProtocolActivatedEventArgs eventArgs = args as ProtocolActivatedEventArgs;
         // Navigate to a view 
         Frame rootFrame = Window.Current.Content as Frame;
         if (rootFrame == null)
         {
            rootFrame = new Frame();
            Window.Current.Content = rootFrame;
         }
         // assuming you wanna go to MainPage when activated via protocol
         rootFrame.Navigate(typeof(MainPage), eventArgs); 

      }
   } 

欲了解更多信息,请阅读更多

在这种情况下,如果您在appmanifest\declarations中的协议名称是app3,那么您的自定义Url应该是app3://。部署app3后,您可以通过LaunchUriAync启动它

e、 g


我以前从未与UWP合作过。只是随便猜测一下:
app3
不是有效的URI。您可能需要提供更多,可能类似于
app3:
的内容,以便它知道app3是模式。@mason是的,这是有效的。但是,此后该应用程序仍然无法工作,因为它现在说我需要一个新的应用程序来打开它。对我来说,这听起来像是一个不同的问题。我仍然会被提示在Windows应用商店中找到一个能够打开app3的应用程序。如果使用冒号和斜杠,请尝试添加两个斜杠(app://)。出现应用选择对话框提示的另一个原因是,有另一个应用已使用相同的协议注册。如果是这种情况,它将提示您选择要打开的应用程序,并且您应该在列表中看到您的应用程序3。即使有两个斜杠提示我从Windows应用商店中搜索应用程序,建议打开应用程序3的应用程序列表也为空。您是否尝试部署应用程序3?您需要部署app3,以便在操作系统中注册它。如果您正在处理一个包含两个项目的解决方案(app3和app4),请尝试右键单击该解决方案。在configuration manager中,选择多个启动,并确保在启动app4之前先启动app3。然后,它将首先运行这两个应用程序。您可以关闭app3并尝试通过app4启动它。对于简单方案,不需要双斜杠。当你需要的时候,电话就会响起。
await LaunchUriAsync(@"app3://")