Установка Capicom без SelfReg:Пользовательские действия Wix не найдены (ошибка 2721)

StackOverflow https://stackoverflow.com/questions/306080

Вопрос

Последовав совету в этот вопрос успешно, я добавил пару дополнительных строк кода для еще одного специального действия.Он предназначен для вызова regsvr32 в копии capicom, которую я пытался поместить в системную папку пользователя.Однако я получаю ошибку 2721, которая, судя по тому, что я видел, похоже, является ошибкой пользовательского действия, которое не найдено.Какие-либо предложения?Я пытаюсь сохранить согласованность с предыдущими версиями моего установщика, вызывая regsvr, а не просто добавляя записи реестра во время установки, что могло бы быть хорошей идеей.:::пожимаю плечами:::

<Directory Id="SystemFolder" Name="Sys">
  ...
  <component ...>
     ...
    <File Id="CapiCom.Dll" LongName="CapiCom.Dll" Name="CAPICOM.DLL" Source=... />
  </component>
</directory>
...
<CustomAction Id="REGCAPICOM" ExeCommand='regsvr32.exe "[SystemFolder]capicom.dll"' Return = "ignore" Execute="deferred" />
...
<InstallExecuteSequence>
  ...
  <Custom Action="REGCAPICOM" After="InstallFiles" />
</InstallExecuteSequence>

Редактировать:Да, использовать regsvr32 в качестве установщика — это некрасиво.Но когда я загрузил Capicom SDK, MS сказала, что это нужно сделать, чтобы установить его.Поискав вокруг, я обнаружил, что многие люди говорят, что это глупый способ сделать это... но это также механизм, предоставленный MS.Я выслушаю предложения по лучшему способу.Я не считаю большой проблемой, если Capicom останется позади после удаления моего приложения, учитывая, что это стандартный компонент Windows.

Редактировать:Хм.По-видимому, одна из задач, которую выполняет selfreg в dll, — это создание случайного начального числа для добавления в реестр.Не знаю, какой механизм он использует для генерации этого начального числа, но подозреваю, что было бы дурным тоном просто сгенерировать его самому, особенно если бы я дал всем пользователям одно и то же начальное число.Не уверен....Видимо, если я пропущу это, Capicom сделает это сам, так что со мной все в порядке.

Это было полезно?

Решение

Правильный путь:

  • c:\Program Files\Microsoft Visual Studio .NET 2003\Common7 ools\Deployment egcap.exe" /O capicom.reg capicom.dll

  • Программа бега от Адама Тенгена опубликовать здесь.

Обратите внимание, что Heat (и Tallow, IIRC) на момент публикации не работают должным образом на Capicom.

Неправильный путь:

<CustomAction Id="RegisterCapicom" Directory="SystemFolder" ExeCommand="regsvr32.exe /s &quot;[SystemFolder]Capicom.dll&quot;" Return="check" Execute="deferred" />
...
<InstallExecuteSequence>
  <Custom Action="RegisterCapicom" After="InstallFiles" />
</InstallExecuteSequence>

Другие советы

Э-э, вы действительно пытаетесь установить системный файл Windows самостоятельно? Это не допускается на очень многих уровнях. Кроме того, regsvr32.exe является SelfReg и SelfReg, как известно, является злом в установках. На самом деле использовать Windows Installer для написания регистрации намного лучше

Однако весь дизайн здесь очень подозрительный.

Вы можете использовать функцию Heat для файла, чтобы создать выходной файл WXS, который поместит информацию capicom.dll в реестр без использования regsvr32 при выполнении MSI.

Что-то вроде этого:

heat file [Path\Capicom.dll] -template:product -out capicom.wxs

Затем добавьте capicom.wxs в свой установщик, в этом файле создайте элемент ComponentGroup, который содержит элементы Component(s):

<ComponentGroup Id="capicom">
  <ComponentRef Id="capicom.dll"/>
</ComponentGroup>

После этого в основной файл WXS добавьте элемент Fragment, который свяжет компонент capicom.

Последний шаг — добавить ComponentGroupRef к объекту, которому он принадлежит:

<Feature Id="PRODUCTFEATURE">
  <ComponentGroupRef Id="capicom" />
  ... [Other components or ComponentGroups references]
</Feature>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top