我认为我有一个使用模型将.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。
下面是执行转换的方法:
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对象实例而引起的,但只在服务中实例化?不太合理。
有人对这些错误有任何线索,以及如何进一步调试这些错误?
发布于 2010-03-11 18:14:36
这里有一些关于在COMObject使用后关闭它的有趣之处。这也许会有帮助,我希望是这样。
它似乎有一些与处理对象相关的东西,要么是过早处置的对象,要么是根本不处理的对象。
在调用COM对象方法的过程中,您曾经尝试过偶尔调用垃圾收集器吗?
我不知道,我吐出了我脑海中的每一件事,也许它最终会成为一个解决办法吗!
发布于 2010-03-10 21:00:38
它坠毁了。是只死鹦鹉。Office (mso.dll)中的一个AccessViolation硬件异常。您几乎没有什么选项可以知道它为什么会崩溃,这不是您的代码。但是使用线程绝对是使单线程COM服务器崩溃的好方法。任何类型的Office代码都有资格。先摆脱线程,然后调用Microsoft支持。
https://stackoverflow.com/questions/2420381
复制相似问题