#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, который вы хотите предоставить.