SelfRegなしでCapicomをインストールする:Wixカスタムアクションが見つかりません(エラー2721)
-
08-07-2019 - |
質問
この質問のアドバイスに成功した後、いくつかの追加行を追加しました別のカスタムアクションのコード。これは、ユーザーのシステムフォルダーに配置しようとしたcapicomのコピーでregsvr32を呼び出すことを目的としています。ただし、エラー2721が表示されます。これは、見たことから、カスタムアクションが見つからないというエラーのようです。助言がありますか?インストール中にレジストリエントリを追加するだけでなく、regsvrを呼び出すことで、インストーラの以前の反復との一貫性を維持しようとしています。 ::: shrug :::
<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コンポーネントであることを考慮して、それは大したことではないと思います。
編集:うーん。どうやら、dllでselfregを実行することの1つは、ランダムシードを作成してレジストリに追加することです。このシードを生成するためにどのメカニズムを使用するかはわかりませんが、特にすべてのユーザーに同じシードを与えた場合は、自分で1つだけ生成することは味が悪いと考えられます。わからない....どうやらこのCapicomをスキップすると、それ自体でそれを行うので、大丈夫です。
解決
正しい方法:
-
c:\ Program Files \ Microsoft Visual Studio .NET 2003 \ Common7 \ Tools \ Deployment \ regcap.exe&quot; / O capicom.reg capicom.dll
-
Adam Tengenの投稿からプログラムを実行。
Heat(およびTallow、IIRC)は、この投稿の時点ではCapicomで正常に動作していません。
間違った方法:
<CustomAction Id="RegisterCapicom" Directory="SystemFolder" ExeCommand="regsvr32.exe /s "[SystemFolder]Capicom.dll"" Return="check" Execute="deferred" />
...
<InstallExecuteSequence>
<Custom Action="RegisterCapicom" After="InstallFiles" />
</InstallExecuteSequence>
他のヒント
うーん、本当に自分でWindowsシステムファイルをインストールしようとしていますか?それは非常に多くのレベルで許可されていません。また、regsvr32.exeはSelfRegであり、SelfRegはインストールで悪意があることがよく知られています。実際には、Windowsインストーラーを使用して登録を作成することははるかに優れています
ただし、ここでの設計全体は非常に疑わしいです。
ファイルでheatを使用して出力WXSファイルを作成できます。これにより、msiの実行時にregsvr32を使用せずにcapicom.dll情報がレジストリに格納されます
次のようなもの:
heat file [Path\Capicom.dll] -template:product -out capicom.wxs
次に、capicom.wxsをインストーラーに追加し、そのファイルで、Component(s)要素を含むComponentGroup Elementを作成します。
<ComponentGroup Id="capicom">
<ComponentRef Id="capicom.dll"/>
</ComponentGroup>
メインのWXSファイルで、capicomコンポーネントをリンクするFragment要素を追加します
最後のステップは、ComponentGroupRefを所属する機能に追加することです。
<Feature Id="PRODUCTFEATURE">
<ComponentGroupRef Id="capicom" />
... [Other components or ComponentGroups references]
</Feature>