2

我正在构建一个充当 URI 共享目标的应用程序;它需要 URI 然后 URL 用于调用浏览器到我们的网站进行共享。我有使用共享目标示例的代码,但是当我在调试器之外时,Launcher.LaunchUriAsync 总是失败。它不会抛出,所以我很难弄清楚错误可能是什么;也许一些安全上下文。

有任何想法吗?代码本身很短;我直接从 shell 运行并通过 Win-C/Share 调用成功 = false。我已经确保清单设置了所有三个网络声明。其他想法?

if (this.shareOperation.Data.Contains(StandardDataFormats.Uri))
{
    Uri uri = await this.shareOperation.Data.GetUriAsync();
    if (uri != null)
    {
        Uri tempUri;
        Uri.TryCreate("http://www.mysite.com/#/search?v=results&bk=1.0&q="+uri.ToString(), UriKind.Absolute, out tempUri);
        bool success = await Windows.System.Launcher.LaunchUriAsync(tempUri);
        if (success) {
            contentValue.Text += "Success invoking browser" + ":URL="+tempUri.ToString()+ Environment.NewLine;
        } else {
            contentValue.Text += "Fail invoking browser" + ":URL=" + tempUri.ToString() + Environment.NewLine;
        }
    }
}
4

2 回答 2

1

共享目标不应启动另一个应用程序。共享目标旨在托管在共享窗格中,并应为用户提供一种快速、上下文相关的方式来与您的应用程序或服务共享内容。

在您的情况下,也许您应该托管一个 WebView 并将其导航到您的服务的 URL?

于 2012-04-27T04:54:10.600 回答
0

为了成功调用 LaunchUriAsync,需要满足几个条件。

正如MSDN 上所见,您需要确保以下内容:

  1. 调用 API 时,调用应用程序必须对用户可见。
  2. 除非您从经典 Windows 应用程序调用此 API,否则必须从 ASTA 线程(也称为 UI 线程)中调用此 API。
  3. 您必须在清单中指定 privateNetworkClientServer 功能才能启动 Intranet URI,例如指向网络位置的 file:/// URI。
  4. 您不能使用此方法在本地区域中启动 URI。例如,应用程序不能使用 file:/// 协议访问本地计算机上的文件。相反,您必须使用存储 API 来访问文件。

我想前两个条件之一就是您的代码失败的原因。(至少那是我的问题)

于 2016-01-11T20:45:02.150 回答