2008-11-20 4 views
1

После успешного выполнения рекомендаций в this question, я добавил несколько дополнительных строк кода для другого пользовательского действия. Этот способ предназначен для вызова regsvr32 на копию capicom, которую я попытался поместить в системную папку пользователя. Тем не менее, я получаю ошибку 2721, которая, похоже, является обычным действием, не найденным ошибкой, из того, что я видел. Какие-либо предложения? Я пытаюсь поддерживать согласованность с предыдущими итерациями моего установщика, вызывая regsvr, а не просто добавлять записи реестра во время установки, что может быть хорошей идеей. ::: пожимают плечами :::Установка Capicom без SelfReg: Wix Пользовательские действия не найдены (Err 2721)

<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> 

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

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

+0

Вы TYR тепла на всех, в библиотеке? – CheGueVerra 2008-11-21 15:52:31

+0

Heat + Capicom = Fail :( – Brian 2009-10-01 21:20:11

ответ

3

Правильный способ:

  • C: \ Program Files \ Microsoft Visual Studio .NET 2003 \ Common7 \ Tools \ Deployment \ regcap.exe»/ O capicom.reg capicom.dll

  • Запуск программы от Адама Тенгена post here.

Обратите внимание на то, что 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

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

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

+0

Ах, я чувствую себя глупо. Я не помню свою оригинальную мотивацию для извлечения capicom из msi, но вы правы, что это плохая идея. Я должен просто выполнить MS's msi для нее вместо этого. Мне все еще интересно, что пошло не так. – Brian 2008-11-20 17:58:22

+0

Достаточно справедливо. Я просто следую инструкциям по установке в мануале capicom redist: для установки CAPICOM выведите «CAPICOM.DLL» из CAPICOM.CAB в ваш каталог system32, затем execute "regsvr32.exe CAPICOM.DLL" Хех – Brian 2008-11-20 18:21:27

0

Вы можете использовать тепло на файл, чтобы создать выходной файл 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> 

AFTE г в главном файле WXS добавить Fragment элемент, который соединит компонент CAPICOM

Последний шаг заключается в добавлении ComponentGroupRef к функции, что она принадлежит:

<Feature Id="PRODUCTFEATURE"> 
    <ComponentGroupRef Id="capicom" /> 
    ... [Other components or ComponentGroups references] 
</Feature>