4

ファイルを持つアプリケーションをsomet.txtインストールすると、特定の場所にインストールされ、C:\tempWindows は 1 回インストールされたことを記録します。

別のアプリケーションが同じ ID を持つ同じファイルを同じ場所にインストールすると、インストール数は 2 に増えます。

これは、そのファイルを完全に削除したい場合、ファイルを削除する前に両方のアプリケーションをアンインストールする必要があるためです。

このカウントを読み取る/編集する機能を探しています。

手動/wix経由/c#経由のいずれかで、これを行う方法を知っている人はいますか?

この情報を見つけました

インストーラーは、コンポーネントのキー ファイルの共有 DLL レジストリ内の参照カウントをインクリメントします。

4

3 に答える 3

4

Windowsインストーラーには2つの個別の参照カウントメカニズムがあり、他の回答はそれぞれ異なるものを参照しています:

  1. コンポーネント (ファイルではない) は、それらを参照するインストール済み製品の数によってカウントされる参照です。これには、コンポーネントを参照するさまざまな製品で、コンポーネントが同じ GUID とキーパスを持っている必要があります。

  2. コンポーネントのキーパスに対して有効にできる従来の SharedDllRefCountメカニズムもあります。これはファイル パスに対して機能するため、コンポーネント GUID が一致しない場合でも機能します。ただし、製品はこの参照カウントを適切にインクリメント/デクリメントする必要がないため、これを使用することはお勧めしません。Wix のデフォルトの動作では、この参照カウントが既に存在する場合にのみインクリメントされます。

これらの参照カウントは、Windows インストーラーで内部的に使用されます。両方がゼロになると、コンポーネントはアンインストールされます。私の知る限り、Windows Installer APIは、この参照カウントをどこにも公開していません。これらを直接読んだり編集したりする必要はないからです。

于 2012-05-14T13:59:49.910 に答える
3

ファイルはコンポーネントに含まれています。コンポーネントは製品で参照されます。参照カウントは数値として保存されませんが、製品からコンポーネントへの参照はこのカウントと見なされます。

ファイルを含むコンポーネントをアンインストールするには、そのコンポーネントを参照するすべての製品をアンインストールする必要があります。

于 2012-05-14T10:50:55.130 に答える
2

共有 DLL レジストリは次の場所にあります。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs

これを編集すると、未定義の動作が発生します。

于 2012-05-14T10:48:18.193 に答える