在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException

Posted

技术标签:

【中文标题】在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException【英文标题】:System.Runtime.InteropServices.COMException when launching a pdf file on Windows Phone 【发布时间】:2015-09-23 14:38:30 【问题描述】:

我正在尝试使用之前在另一个应用程序上使用的以下工作代码打开一个 pdf 文件,

但是这一次我得到 System.Runtime.InteropServices.COMException 当流程到达这一行时:Windows.System.Launcher.LaunchFileAsync(pdffile);

这个异常是什么意思,如何去掉?

请注意,不关心这个异常(禁用它),

文件仍然无法打开。

请注意:该文件存在于我的隔离文件夹中(使用 wpowertool 检查),

我尝试了 2 个不同的文件,所以这不应该是文件损坏的问题。

    public void openFile(string options)
    
        System.Diagnostics.Debug.WriteLine("options: " + options);
        string optVal = JsonHelper.Deserialize<string[]>(options)[0];
        asyncOpen(optVal);
    

    public async Task asyncOpen(string filename)
    
            filename = filename.Substring(2, filename.Length - 2);
            filename = filename.Replace("//", "/").Replace("/", "\\");
            Windows.Storage.StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;
            Debug.WriteLine("local: " + local.Path);
            Windows.Storage.StorageFile pdffile = await local.GetFileAsync(filename);
            Debug.WriteLine("pdffile: " + pdffile.Name);
            //// Launch the pdf file.
                Windows.System.Launcher.LaunchFileAsync(pdffile); 
    

这个MSDN post 属于我。是的,文件已安装,我有 acrobat reader。

请注意,此 C# 代码是 phonegap/cordova plugin,在我的混合应用程序中通过 javascript 调用。

【问题讨论】:

这样您就不会得到以下答案:pdf 是否存在您是否安装了 Adob​​e Reader? 您可能想澄清一下this MSDN post belongs to you 如果没有文件我会有“filenotfoundexception”之类的 是的,我知道并且只是想避免你得到无用的答案。 【参考方案1】:

注意这个MSDN Article - Launcher.LaunchFileAsync(IStorageFile)中的备注:

调用 API 时,调用应用程序必须对用户可见。必须从 ASTA 线程(也称为 UI)调用此 API 线程)。


为 OP 分享解决方案付出了巨大的努力。以下代码应该可以帮助其他人解决此问题:
Deployment.Current.Dispatcher.BeginInvoke(() =>  asyncOpenFile(options); ); 

【讨论】:

请问如何同步打开? 编辑并支持你,因为我看到了一些conflicts here。一位 MS 员工说 访问存储相对较慢,您 不应该 在 UI 线程中进行, - MSDN doco 说你应该在 UI 线程上执行它。是哪一个?? 它在 UI 上工作,这样 Deployment.Current.Dispatcher.BeginInvoke(() => asyncOpenFile(options); );

以上是关于在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException的主要内容,如果未能解决你的问题,请参考以下文章

.jpg 到 .pdf 转换 - iTextSharp.text.PageSize' 在 Windows Phone 8.1 中引发异常

在 Windows Phone 8.1 中从后台任务启动应用程序

在 windows phone 8 上开始使用即时消息

Windows Phone开发(22):启动器与选择器之BingMapsDirectionsTask

Windows Phone 7 模拟器无法运行

windows phone silverlight 8 app 系统托盘颜色变化