2010-08-30 4 views
2

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

Я предполагаю, что мой первый вопрос: некоторые люди используют библиотеку классов и другие, используя приложение 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 пытается использовать конвертер, я получаю сообщение об ошибке «Не удается запустить конвертер 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 

, а затем импортируйте файл реестра.

Все они дают ошибку: «Слово не может запустить конвертер MyConverter документа»

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

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

+0

Какие настройки содержатся в файле reg? –

ответ

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()); 
    } 
} 
+0

Спасибо. Я пробовал это, и он не называется. Я также добавил Debugger.Break(), чтобы бросить его в visual Studio, когда Word вызывает конвертер, и он никогда не попадает. – mfanto

+0

@mattjf: Так что это означает, что проблема связана с регистрацией. –

+0

Да, это то, о чем я подозревал. Я думаю, что моя проблема - неправильная комбинация шагов для регистрации. – mfanto

Смежные вопросы