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