6

このアプリケーションは、実行時にいくつかの設定をレジストリにHKCUハイブに書き込みます。アンインストール中にこの設定を削除したい。コードは次のとおりです。

  <Fragment>
    <DirectoryRef Id="INSTALLLOCATION" DiskId="1" FileSource="$(var.SourceDirProject)\">
      <Component Id="DeleteHkcuManufacturerHive" Guid="GUID">
        <Condition>REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE</Condition>
        <CreateFolder/>
        <RemoveRegistryKey Action="removeOnUninstall"
 Id="HKCUkey" Root="HKCU" Key="Software\$(var.Manufacturer)"/>
      </Component>
    </DirectoryRef>
  </Fragment>

ICE57:コンポーネント'DeleteHkcuManufacturerHive'には、マシンごとのKeyPathを使用して、ユーザーごととマシンごとの両方のデータがあります。
なぜICE57を入手するのですか?インストールはユーザーごとです。前もって感謝します。

UPD:ここにマシンごとの要素はありますか?INSTALLLOCATION = Program Files \ ManufacturerDirectoryである可能性がありますか?

4

2 に答える 2

7

現在のユーザーのみが利用できるHKCUハイブを操作しています。

MSDNの状態:

ICE57は、個々のコンポーネントがマシンごととユーザーごとのデータを混合しないことを検証します。このICEカスタムアクションは、レジストリエントリ、ファイル、ディレクトリキーパス、およびアドバタイズされていないショートカットをチェックします。同じコンポーネントでユーザーごとのデータとマシンごとのデータを混在させると、マルチユーザー環境の一部のユーザーに対してコンポーネントが部分的にしかインストールされない可能性があります。

ICEは、イン​​ストールパッケージの検証です。上記のように、ICE57は、マシンごととユーザーごとの構成を混同しないようにするためのものです。アンインストール中にHKCUへのエントリを削除する必要がある場合(およびソフトウェアがマシンごとにインストールされる場合)、以下のスクリーンショットに示すように、VisualStudioの[プロパティ]>[ツール設定]でその特定の検証をオフにできます。

ここに画像の説明を入力してください

ただし、問題の根本的な原因について考えてみることをお勧めします。マシンごとのインストールを行っている場合、アプリはすべてのユーザーにインストールされているのに対し、インストーラーまたはアプリケーションは現在のユーザーのみが利用できるため、HKCUに書き込んでいない可能性があります。

于 2012-09-14T10:57:28.947 に答える
3

私はwix-usersメーリングリストに答えを持っています。ピーター・シルトクリフの答えは次のとおりです。

ProgramFilesは、マシンごとの場所です。昇格した場合にのみアクセスできます。ユーザーごとのインストールでプログラムコードをインストールする場合は、%LocalAppData%\Programsにインストールする必要があります。

状態を完全に取り除きます。コンポーネントはインストールされますが、アプリケーションをアンインストールするまで効果はありません。その時点で、コンポーネントが削除されると、レジストリキーも削除されます。

于 2012-09-19T05:08:34.890 に答える