URI正确但在运行时不正确?

时间:2017-06-29 15:17:44

标签: c# uwp windows-runtime uri hololens

我的文件位于'C:/Users/Username/Desktop/sample.pdf'。我可以手动打开它,它加载很好。现在,如果我放置一个无效的链接,例如file:///sample.pdf,这显然无法找到,Hololens应用程序将打开尝试打开pdf的Edge浏览器。所以,很明显代码正在运行。

那么为什么在运行时加载Hololens时这个uri是不正确的呢?

    string uriToLaunch = "file:///C:/Users/Username/Desktop/sample.pdf";

    // Create a Uri object from a URI string 
    var uri = new Uri(uriToLaunch);

    Task task = new Task(

        async () =>
        {
            // Launch the URI
            var success = await Windows.System.Launcher.LaunchUriAsync(uri);

            if (success)
            {
                // URI launched
            }
            else
            {
                // URI launch failed
            }
        });

    task.Start();
    task.Wait();

这是抛出的异常。

抛出异常:Assembly-CSharp.dll中的'System.ArgumentException'

WinRT信息: 提供的URI方案无法启动。 未处理的'Platform.InvalidArgumentException'异常被捕获! - '参数不正确。'

参数不正确。 提供的URI方案无法启动。',Sender:'null'。缺少try / catch块。

Hololens中有这些例外的棘手问题有时它们似乎与最近没有工作有关。我试过谷歌搜索错误,没有任何帮助。

编辑: string uriToLaunch = @"file:///Data/myFiles/sample.pdf"; 返回WinRT信息:无法启动提供的URI方案。 参数不正确。

string uriToLaunch = @"/Data/myFiles/sample.pdf"; 返回UriFormatException:无效的URI:无法确定URI的格式。

注意我以为我可以从应用中打开Edge浏览器,但我无法复制此功能。我们应该说,唯一能积极响应的是

@"ms-appx:///Data/myFiles/sample.pdf";

这将打开一个单独的对话框,将我带到MS商店尝试购买将打开ms-appx文件的应用程序。

编辑2:

    FileOpenPicker openPicker = new FileOpenPicker();
    openPicker.ViewMode = PickerViewMode.Thumbnail;
    openPicker.ViewMode = PickerViewMode.Thumbnail;
    openPicker.FileTypeFilter.Add(".jpg");
    openPicker.FileTypeFilter.Add(".jpeg");
    openPicker.FileTypeFilter.Add(".png");

    Task task = new Task(
    async () =>
    {
        StorageFile file = await openPicker.PickSingleFileAsync();
        if (file != null)
        {
            // Application now has read/write access to the picked file
            Debug.Log("Picked photo: " + file.Name);
        }
        else
        {
            Debug.Log("Cancelled");
        }
    });

    task.Start();
    task.Wait();

我已经尝试过实现这个简单的FileOpenPicker,只是为了测试并看看我是否可以使用一个,但没有成功。

它抛出了这个:

抛出异常:mscorlib.ni.dll中的“System.Exception”

未处理的'Platform.COMException'异常被捕获! - '窗口句柄无效。

编辑3:这是我在错误上找到的全部内容。

收到COMException 如果异常的ErrorCode属性值为0x80070578(ERROR_INVALID_WINDOW_HANDLE),则表示未在UI线程上调用该方法。

编辑4:现在崩溃并返回:

抛出异常:mscorlib.ni.dll中的“System.Exception”

程序'[4084] hololensapplication.exe'已退出,代码为-1073741189(0xc000027b)。

1 个答案:

答案 0 :(得分:0)

正如@AVK指出的那样,UWP应用程序是沙盒式的。这意味着无法访问Hololens本地环境之外的文件。 HoloLens上有本地已知文件夹,但解决此问题的唯一方法是使用第一方应用程序,如OneDrive,Azure等。