この質問のアドバイスにうまく従った後、別のカスタムアクション用にコードを数行追加しました。これは、ユーザーのシステムフォルダに入れようとしたcapicomのコピーでzippy32を呼び出すことを目的としています。しかし、私が見たものから、エラー2721が発生します。これは、カスタムアクションが見つからないというエラーのようです。助言がありますか?インストール中にレジストリエントリを追加するだけでなく、zippyを呼び出すことで、インストーラの以前のイテレーションとの一貫性を維持しようとしています。これは、代わりに良いアイデアかもしれません。:::肩をすくめる:::
<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>
編集:はい、インストーラーとしてzippy32を使用するのは醜いです。しかし、私がCapicom SDKをダウンロードしたとき、それはMSがそれをインストールするために行うと言ったことです。周りを検索すると、これは愚かな方法だと言う人がたくさんいます...しかし、MSが提供するメカニズムでもあります。より良い方法の提案を聞きます。アプリケーションがアンインストールされたときにCapicomが取り残されても、それが標準のWindowsコンポーネントであることを考えると、大したことではないと思います。
編集:うーん。どうやら、dllでselfregを実行することの1つは、レジストリに追加するランダムシードを作成することです。このシードを生成するためにどのメカニズムを使用するかはわかりませんが、特にすべてのユーザーに同じシードを与えた場合は、自分でシードを生成するだけでは味が悪いと考えられます。わからない....どうやら私がこれをスキップした場合、Capicomはそれ自体でそれを行うので、私は元気です。