1

この質問のアドバイスにうまく従った後、別のカスタムアクション用にコードを数行追加しました。これは、ユーザーのシステムフォルダに入れようとした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はそれ自体でそれを行うので、私は元気です。

4

3 に答える 3

3

正しい方法:

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

  • ここでAdam Tengen の投稿からプログラムを実行します。

この投稿の時点で、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>
于 2009-01-15T15:25:11.217 に答える
1

ええと、本当に Windows システム ファイルを自分でインストールしようとしているのですか? それは非常に多くのレベルで許可されていません。また、regsvr32.exe は SelfReg であり、SelfReg はインストールに悪影響を及ぼすことがよく知られています。実際にWindowsインストーラーを使用して登録を作成することは、はるかに優れています

ただし、ここの設計全体は非常に疑わしいです。

于 2008-11-20T17:52:15.210 に答える
0

msi が実行されたときに、regsvr32 を使用せずに capicom.dll 情報をレジストリに配置する出力 WXS ファイルを作成するために、ファイルに対して heat を使用できます。

そのようなもの:

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

次に、capicom.wxs をインストーラーに追加します。そのファイルで、Component(s) 要素を含む ComponentGroup 要素を作成します。

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

メインの WXS ファイルに、capicom コンポーネントをリンクする Fragment 要素を追加します。

最後のステップは、ComponentGroupRef をそれが属する機能に追加することです。

<Feature Id="PRODUCTFEATURE">
  <ComponentGroupRef Id="capicom" />
  ... [Other components or ComponentGroups references]
</Feature>
于 2008-11-20T18:44:18.973 に答える