首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试COM错误的帮助?(使用将.mdi转换为.pdf文件)

调试COM错误的帮助?(使用将.mdi转换为.pdf文件)
EN

Stack Overflow用户
提问于 2010-03-10 20:36:35
回答 2查看 2.5K关注 0票数 1

我认为我有一个使用模型将.mdi文件转换为PDF的工作解决方案。解决方案是在一个Windows服务中,但现在我遇到了一些错误,我在追踪信息时遇到了问题。

我得到的例外是:

服务器抛出一个异常。(来自HRESULT: 0x80010105 (RPC_E_SERVERFAULT)的异常) System.Runtime.InteropServices.COMException (0x80010105):服务器抛出一个异常。(HRESULT例外: 0x80010105 (RPC_E_SERVERFAULT)) 在MODI.DocumentClass.Create(String FileOpen) at DocumentStore.Mdi2PDF(String path,String newPath)

然后,在事件查看器中出现以下应用程序错误:

故障应用程序MyWindowsServiceName.exe,版本1.0.0.0,时间戳0x4b97f185,故障模块mso.dll,版本12.0.6425.1000,时间戳0x49d65443,异常代码0xc0000005,故障偏移量0x0000bd8e,进程id 0xa5c,应用程序启动时间0x01ac08cf032914b。

下面是执行转换的方法:

代码语言:javascript
复制
private int? Mdi2PDF(String path, String newPath)
{
    int? pageCount = null;
    string tmpTif = Path.GetTempFileName();

    MODI.Document mdiDoc = new MODI.Document();
    mdiDoc.Create(path);
    mdiDoc.SaveAs(tmpTif,
        MODI.MiFILE_FORMAT.miFILE_FORMAT_TIFF_LOSSLESS,
        MODI.MiCOMP_LEVEL.miCOMP_LEVEL_HIGH);
    mdiDoc.Close(false);

    pageCount = Tiff2PDF(tmpTif, newPath);
    if (File.Exists(tmpTif))
        File.Delete(tmpTif);

    return pageCount;
}

我从调用该对象的服务中删除了所有线程,因此只有主线程正在初始化MODI对象,但仍然得到了错误,因此似乎与线程无关。

我还构建了一个控制台应用程序,转换数百个文档,没有得到例外。

因此,它似乎是由于创建了太多的MODI对象实例而引起的,但只在服务中实例化?不太合理。

有人对这些错误有任何线索,以及如何进一步调试这些错误?

EN

回答 2

Stack Overflow用户

发布于 2010-03-11 18:14:36

这里有一些关于在COMObject使用后关闭它的有趣之处。这也许会有帮助,我希望是这样。

  1. COMException 0x80010105
  2. (SERVERFAULT)

它似乎有一些与处理对象相关的东西,要么是过早处置的对象,要么是根本不处理的对象。

在调用COM对象方法的过程中,您曾经尝试过偶尔调用垃圾收集器吗?

我不知道,我吐出了我脑海中的每一件事,也许它最终会成为一个解决办法吗!

票数 2
EN

Stack Overflow用户

发布于 2010-03-10 21:00:38

它坠毁了。是只死鹦鹉。Office (mso.dll)中的一个AccessViolation硬件异常。您几乎没有什么选项可以知道它为什么会崩溃,这不是您的代码。但是使用线程绝对是使单线程COM服务器崩溃的好方法。任何类型的Office代码都有资格。先摆脱线程,然后调用Microsoft支持。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2420381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档