2014-01-15 4 views
1

Я не эксперт COM Interop, поэтому мне не удалось выяснить последний шаг развертывания моего приложения. Несколько кусков информацииНевозможно зарегистрировать dll на новом пути в dev-машине

Использование: VS 2010 C# и MS Access 2010 VBA Разработка на: Windows 7 64 бит Target Env: Windows XP 32 бит

Я написал DLL, который вызывается с помощью VB в Access для выполнения некоторой работы Web API. В построенной DLL установлен флажок Make COM Visible. Затем я запускаю команду

Regasm /register /codebase /tlb 

для регистрации dll. После этого я открыл Access и добавил ссылку на DLL. В этот момент dll все еще находилась в каталоге bin/debug после его создания. Еще одна работа над разработкой и regasm/unregister, за которой следует regasm/регистрация новой DLL, и все работает отлично. Теперь я закончил работу по разработке и работаю над установщиком для DLL. Я создал установщик, который устанавливает DLL в файлы C: \ Program ... и затем регистрирует DLL в этом месте, используя ту же команду. но когда я открываю доступ для изменения ссылки, старый все еще там. Он указывает на bin/debug. Снимите флажок (удалите ссылку) и сохраните доступ. Открыл проект, и все еще была старая ссылка. Я использовал кнопку «Обзор», чтобы перейти к файлу tlb в новом месте, и я получаю ошибку. Пользовательский тип не определен. Я пошел в каталог и снова запустил команду regasm. но все равно ничего. Я был бы очень признателен за любую помощь в отношении того, какие шаги мне нужно предпринять, чтобы добиться этого.

Update 1 после продолжая играть с ним, я думаю, что проблема с тем, что Visual Studio делает для того чтобы сделать DLL COM Visible. Мой следующий план - посмотреть, что делает DLL COM Visible на самом деле, как его отменить, и если мне нужно воспроизвести это на установочной машине.

Update 2 При дальнейшем осмотре я обнаружил, как старые записи и новые записи для библиотеки DLL COM Interop в реестре. Я думаю, проблема в том, что мне нужно удалить старые записи. Будет продолжать изучать его.

Update 3 с помощью OLE просмотра объекта, когда я вижу, что есть две записи один является для win32, а другой для Win64. win32 указывает на C: \ Program Files и Win64 указывает на Bin \ Debug. Я думаю, проблема в том, что мне нужно установить 64-битную версию (я думаю, у меня есть 64-разрядный Office). Но мне понадобится 32 бит для целевого Env.

+0

Эти проблемы могут быть разочаровывающими, я сам стал жертвой этого чтения на [DLL hell] (http://en.wikipedia.org/wiki/DLL_Hell) – meda

ответ

0

Таким образом, основная проблема заключалась в том, что мой установленный доступ был 64 бит, а мой установщик регистрировал DLL для 32 бит, а мой Dev Env регистрировал DLL для 64-битного. Я перестроил установщик на 64 бит, но когда я проверил OLE Object viewer, 64-битный путь все еще указывал на мой путь к dev. Затем я использовал информацию this для ручного запуска regasm. Посмотрев в OLE Object Viewer и Path для 64-битного, теперь корректно указывалось на C: \ Progarm Files.

Окончательный тест открыт Доступ, и это сработало.

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