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" />
今はすべて順調です。