Добавить пользовательские ключи реестра с помощью установщика - PullRequest
0 голосов
/ 01 октября 2018

Я написал Addin для Solidworks (.dll).Чтобы Solidworks мог найти его, требуется дополнительный ключ реестра, который я установил в ComRegistryFunction.Когда я компилирую его и регистрирую .dll, используя regasm.exe \tlb, все работает как положено.

Теперь я хочу распространить надстройку, и я искал проекты установки, чтобы все было хорошо упаковано.Я много гуглил, но, честно говоря, довольно сложно найти достоверную информацию по этой теме.Вот что я сделал:

  • Добавьте мою dll как «первичный выход» в проект установки
  • Для этого файла установите для Register значение vsdrpCOM

Тем не менее, программа установки не устанавливает пользовательские ключи реестра (похоже, он не запускает функцию ComRegisterFunction моего класса).

Мне удалось заставить его работать вручную добавивэти разделы реестра на вкладке Реестр проекта установки.Но это означает, что я должен вручную ввести GUID класса, а также описание и заголовок, хотя все это уже указано в классе.Я знаю, что забуду поменять одно или другое в какой-то момент в будущем.

Как я могу заставить установщик автоматически тянуть эти ключи регистра и устанавливать их?

Я использую VisualStudio 2017 и .Net v4.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы правы, функция установщика Windows не вызывает код функции регистрации.

Параметр vsdrpCOM должен выполнять большую часть регистрации и извлекаться во время сборки в таблицу классов файла MSI, а некоторые - в таблицу реестра. Это можно проверить, открыв файл MSI в Orca и увидевчто было добыто.Вы не сказали точно, чего не хватало, учитывая, что есть записи реестра класса и интерфейса.Другая путаница может заключаться в том, нацелен ли ваш MSI-файл на 32-разрядную или 64-разрядную версию, и где вы ожидаете создания записей реестра (классы \ root против программного обеспечения \ классы и родные 64-разрядные по сравнению с WoW6432).Также обратите внимание, что установщик Windows воспринимает настройку «Просто я» для каждого пользователя буквально, поэтому вы будете регистрировать COM для каждого пользователя, а не для системы.

Это может помочь, старые, но эти проекты не изменились за эти годы:

https://www.red -gate.com / simple-talk / dotnet / visual-studio / build-and-deploy-a-net-com-assembly /

Так что проверьте архитектуру и настройки Все / Только я, и посмотрите на эти таблицы MSI, чтобы увидеть, что там.

0 голосов
/ 02 октября 2018

Если вы можете себе это позволить, я настоятельно рекомендую перейти с проекта установки VS на wix .У него крутая кривая обучения, но он опережает функциональность и настраиваемость.Чтобы решить вашу проблему с wix, вы использовали бы утилиту heat , которая входит в состав набора инструментов и генерирует конфигурацию xml, которая содержит com-регистрацию на основе вашей dll.Я верю, что это будет включать пользовательские регистрации, но на всякий случай проверьте это в первую очередь.

С другой стороны, если вы не планируете в будущем делать установщики какой-либо значительной сложности, я думаю, что вы можете сделать пользовательское действиедля проекта настройки VS и вызовите regasm вручную с помощью Process.Start ().Или, что еще лучше, добавьте свои собственные регистрации в собственное действие.

...