Развертывание Excel UDF - PullRequest
       11

Развертывание Excel UDF

3 голосов
/ 22 января 2010

У меня есть Excel UDF, который вызывает веб-сервис. Код UDF - это код надстройки автоматизации, представляющий собой библиотеку классов C #, и я создал для нее установщик. Когда я запускаю настройку, никакая ссылка на конкретный код надстройки не появляется в списке toos -> надстройки -> надстройки автоматизации Excel, и функция не отображается на панели формул. Я использую VS 2008 и Excel 2003.

Я что-то здесь упускаю? Должен ли я определить путь, в котором Excel должен выбрать DLL-файл, чтобы он указывал на DLL-файл, созданный из кода udf? Или есть какие-то проблемы безопасности, о которых нужно позаботиться? На клиентском компьютере для уровней безопасности установлено полное доверие, но надстройка не отображается в списке.

Я что-то здесь упускаю?

1 Ответ

6 голосов
/ 22 января 2010

Это происходит потому, что для установки надстройки автоматизации требуется, чтобы в реестре была сделана настраиваемая запись "CLSID {GUID} \ Programmable", которая при создании надстройки автоматизации обычно обрабатывается с помощью методов, отмеченных ComRegisterFunctionAttribute и ComUnregisterFunctionAttribute в вашем классе. Затем эти классы регистрируются при запуске RegAsm в сборке.

Однако при использовании пакета установки Visual Studio атрибуты ComRegisterFunctionAttribute и ComUnregisterFunctionAttribute незаметно игнорируются. Это происходит из-за того, что установочный проект запускает RegAsm с использованием ключа / regfile, чтобы создать файл .reg, содержащий все необходимые ключи реестра. Именно этот файл .reg затем используется при запуске пакета .msi на клиентском сайте. Проблема заключается в том, что когда RegAsm запускается через ключ / regfile, результирующий файл .reg не содержит никаких обновлений реестра, сделанных пользовательскими функциями реестра (например, помеченными с помощью ComRegisterFunctionAttribute и ComUnregisterFunctionAttribute).

В результате ваша пользовательская запись реестра "CLSID {GUID} \ Programmable" не создается, и, следовательно, ваша надстройка автоматизации не отображается в списке надстроек автоматизации.

Чтобы исправить эту ситуацию, вы должны создать свою собственную, настраиваемую запись "CLSID {GUID} \ Programmable" другим способом. Проще всего это сделать, воспользовавшись разделом Редактор реестра пакета установки.

Правильная обработка всех шагов для пакета установки для надстройки автоматизации несколько сложна. К счастью, у меня есть пошаговое объяснение того, как это сделать (а также более подробное описание того, почему это происходит) в качестве ответа на вопрос: Как получить COM Server для Excel, написанный на VB .NET установлен и зарегистрирован в списке серверов автоматизации .

Надеюсь, это поможет!

Mike

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...