Массовое развертывание управляемого элемента управления ActiveX, написанного на C # .NET 4.0

#c# #.net-4.0 #activex #clickonce

#c# #.net-4.0 #activex #clickonce

Вопрос:

Я создал управляемый элемент управления ActiveX на C # (.NET 4.0), доступ к которому осуществляется Office VBA (в настоящее время вызывается из кода VBA в Dynamics). Однако, когда я ищу способ развертывания этого в массах в нашей компании (и постоянно обновляю его), я не могу найти эффективный способ сделать это.

Сначала я думал, что смогу сделать это как-нибудь через ClickOnce, но после прочтения некоторых статей я не думаю, что это сработает.

Есть ли какие-либо предложения? Возможно, PowerShell?

Мне нужно будет несколько раз обновлять этот элемент управления по мере добавления новых функций.

Любые советы приветствуются.

Спасибо за ваше время,

Роб

Ответ №1:

Пока не исключайте ClickOnce. Проблема с ClickOnce заключается в том, что он устанавливает приложения для каждого пользователя, а не для каждой машины / всей системы. Поскольку регистрация COM / ActiveX обычно выполняется на уровне компьютера / системы, то есть записи реестра находятся в HKLM, ClickOnce его не поддерживает (из-за разрешений, необходимых для изменения HKLM части реестра).

Но начиная с Windows 2000 можно регистрировать COM-объекты в пользовательской части реестра: HKEY_CURRENT_USERSoftwareClasses сопоставление с HKEY_LOCAL_MACHINESOFTWAREClasses которым совпадает с HKEY_CLASSES_ROOT .

Итак, используя что-то вроде regrex, вы должны быть в состоянии определить записи реестра, которые вам нужно создать HKCU . Когда вы это сделаете, найдите способ запуска этого обновления HKCU reg при выполнении установки / обновления ClickOnce.

Комментарии:

1. Привет, Дункан, спасибо за ответ. Я прочитал эту статью, но не думаю, что она напрямую применима к тому, что мне нужно. Размещающим приложением будет Dynamics (или, для аналогичного примера, Excel). В Excel вы переходите в окно кода, выбираете Сервис -> Ссылки и добавляете мой элемент управления ActiveX (C # 4.0) (который был зарегистрирован в regasm). Я надеялся избежать запуска regasm на компьютерах 75 . И не уверен, как обновить мой элемент управления ActiveX после его развертывания для них всех. Я что-то упустил из этой статьи или есть какое-то другое направление, на которое вы можете мне указать? Спасибо!

2. На самом деле я обновлю ответ. Я думал о регистрации COM-объектов в реестре пользователя (HKCU), а не на компьютере (HKLM)

3. Привет, Дункан, спасибо за обновление. Итак, мне интересно, должен ли я создать решение PowerShell / WMI, которое использует RegInrEx. Интересная идея…

4. На самом деле, если подумать, ClickOnce запускается EXE-файлом-заглушкой, который запускается перед EXE-файлом вашего приложения, которого, я полагаю, у вас нет (я полагаю, у вас просто DLL).). В любом случае локальная регистрация COM может быть полезной — возможно, ваш механизм доставки может быть чем-то простым, запускаемым из сценария входа в систему.

Ответ №2:

Вы могли бы использовать regasm.exe утилиту:

 regasm.exe /codebase foo.dll
  

где foo.dll находится управляемая сборка, содержащая элемент управления ActiveX, который вы хотите предоставить.