Установка Capicom без SelfReg: пользовательские действия Wix не найдены (ошибка 2721) - PullRequest
1 голос
/ 20 ноября 2008

После успешного следования совету в этом вопросе я добавил пару дополнительных строк кода для другого настраиваемого действия. Этот предназначен для вызова 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, он сделает это самостоятельно, так что я в порядке.

Ответы [ 3 ]

3 голосов
/ 15 января 2009

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

Обратите внимание, что 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>
1 голос
/ 20 ноября 2008

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

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

0 голосов
/ 20 ноября 2008

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

Примерно так:

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

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

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

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

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

<Feature Id="PRODUCTFEATURE">
  <ComponentGroupRef Id="capicom" />
  ... [Other components or ComponentGroups references]
</Feature>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...