Установка конвертера файлов OpenXML - PullRequest
2 голосов
/ 30 августа 2010

Я написал управляемый конвертер файлов OpenXML в c #, но у меня проблемы с развертыванием.Для развертывания я использую VS Setup Project.

Наверное, мой первый вопрос: я вижу, что некоторые люди используют библиотеку классов, а другие используют приложение Windows в качестве COM-сервера.Есть ли предпочтения по любому из них?Мой конвертер имеет зависимости от библиотек не в GAC.

Когда дело доходит до регистрации COM-сервера, следующий пост: http://blogs.msdn.com/b/speront/archive/2009/04/17/9553717.aspx

предлагает добавить это в Main () управляемого EXE-файла:

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

Который не будет работать для проекта установки.Это работает, хотя, если я сначала запустить EXE.

Я попытался запустить regasm:

regasm MyConverter.dll, что успешно, но когда Microsoft Word пытается использовать конвертер, я получаю сообщение об ошибке «Word не может запустить конвертер MyConverter Document»

Затем я попытался создать приложение 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 Document»

У меня есть правильные записи реестра для моего конвертера в Office \ 12.0 \ Word \ Text Converters \ OOXML Converters \Импорт

Конвертер успешно работал.Просто развертывание не работает ни при каких условиях.

1 Ответ

0 голосов
/ 30 августа 2010

Если вы правильно настроили конвертер, возможно, он выдает необработанное исключение, когда 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());
    }
}
...