安装OpenXML文件转换器

时间:2010-08-30 16:59:00

标签: c# .net com installation openxml

我已经在c#中编写了一个托管的OpenXML文件转换器,但是我遇到了部署问题。对于部署,我使用的是VS Setup Project。

我想我的第一个问题是,我看到有些人使用类库,而其他人使用Windows应用程序作为COM服务器。是否有偏好?我的转换器依赖于不在GAC中的库。

在注册COM服务器时,请发布以下帖子:http://blogs.msdn.com/b/speront/archive/2009/04/17/9553717.aspx

建议将其添加到托管EXE的Main():

Application.OleRequired();
MyConverter converter = new MyConverter();
Application.Run();

哪个不适用于安装项目。如果我先手动运行EXE,这确实有效。

我试过运行regasm:

regasm MyConverter.dll,成功,但当Microsoft Word尝试使用转换器时,我收到错误“Word无法启动转换器MyConverter文档”

接下来,我尝试创建Windows应用程序并使用:

public static void Main(string[] args)
{
     Guid guid = new Guid("EFADDB5B-933E-49FE-B3C8-F6FD7FB1B788");

     RegistrationServices regSrv = new RegistrationServices();

     regSrv.RegisterTypeForComClients(typeof(MyConverter), ref guid);
}

最后,我试过了:

regasm /regfile:test.reg MyConverter.dll

然后导入注册表文件。

所有这些都给出错误:“Word无法启动转换器MyConverter文档”

我在Office \ 12.0 \ Word \ Text Converters \ OOXML Converters \ Import中有我的转换器的正确注册表项

转换器已成功运行。只是部署在任何实例下都不起作用。

1 个答案:

答案 0 :(得分:0)

如果正确设置转换器,则可能是在Word尝试启动时抛出未处理的异常。要弄清楚异常是什么,最好用try / catch块包装所有接口方法并记录异常堆栈跟踪:

public void HrImport(
    string bstrSourcePath,
    string bstrDestPath,
    IConverterApplicationPreferences pcap,
    out IConverterPreferences ppcp,
    IConverterUICallback pcuic)
{
    try
    {
        // code to import document
    }
    catch (Exception ex)
    {
        // log the exception
        // 
        System.Diagnostics.Trace(ex.ToString());
    }
}