3

ClickOnceを使用して以前にデプロイされたアプリケーション用のWiXインストーラーを作成しています。

アプリケーションがクライアントコンピューターにインストールされているかどうかを検出し、MSIのインストールを中止したいと思います。Stack Overflowで同様の質問を検索しましたが、その方法が見つかりませんでした。

アプリケーションがインストールされた場所を示すパスまたはレジストリキーが見つかった場合は、条件を使用してMSIのインストールを中止できます。

この質問の答えを使って、私はどこかに行くことができました。ClickOnceショートカットは、拡張子が.appref-msのファイルです。これは私が使用するコードです:

<Property Id="APP_CLICKONCE_INSTALLED">
    <DirectorySearch Id="dirSearch.APP.CLICKONCE" AssignToProperty="yes" Path="[StartMenuFolder]" Depth="2">
    <FileSearch Id="fileSearch.APP.CLICKONCE" Name="APP.appref-ms" />
    </DirectorySearch>
</Property>

<Condition Message="App is already installed. Please uninstall it then re-run this setup.">
    <![CDATA[APP_CLICKONCE_INSTALLED = "" OR INSTALLED]]>
</Condition>

ただし、StartMenuFolderはAllUsersプロファイルの場所を提供しますが、現在のユーザーにはクリックワンスアプリケーションがインストールされます。私はまだ掘っています。

perUserインストールを使用すると、StartMenuFolder現在のユーザーの場所を提供します(私はperMachineを使用していました)。

<Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" />

今はすべて順調です。

4

1 に答える 1

5

WiXについては何も知りませんが、ClickOnceアプリケーションがインストールされているかどうかを確認する別の方法は、レジストリ内のアンインストール文字列を反復処理することです。これは次のとおりです。

HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

アプリケーションの製品名がそのキーセットの表示名と一致するものを検索する必要があります。

于 2012-05-08T07:52:48.567 に答える