0

私は、特定のソフトウェアが(その名前で)すでにインストールされているかどうかを特定の瞬間に見つける必要があるソフトウェアを書いています-したがって、インストーラーがそのソフトウェアをインストールしようとしているときに同じことを行い、時にはそのソフトウェアがすでにインストールされていると警告しますPCで。

問題は、これを行うのにどちらが良い方法かわからないことです。これで、ソフトウェアはデフォルトフォルダーを検索し、.exeが見つからない場合は、ユーザーにソフトウェアをインストールした場所を指定するか、アンインストールしたと見なすように求めます。

しかし、私はそれがそれ自身で物事を行うことを望んでいます。ソフトウェアがユーザー入力なしでインストールされているかどうかを検出できるはずですが、どちらが効率的な方法かはわかりません。

私が今見つけた唯一の方法は、Windowsの[プログラムの追加と削除]と同じことを行うことです。多くのレジストリエントリを調べて見つけようとしますが、多くの場所で見られるという事実を考えると、これには不必要な時間がかかりすぎると思います。 1つのソフトウェアのみを検索します。

では、C ++には他に費用のかからないオプションはありませんか?

ありがとう、

モメルギル

4

3 に答える 3

4

これは、質問したいものがどのようにインストールされているかに完全に依存します。常にMSIからインストールされている場合は、MSIを調べて、APIの呼び出し方法やレジストリを読んで、一意のIDが存在するかどうかを確認できます。

'unzip'でインストールされている場合、簡潔な解決策はありません。

于 2012-08-18T12:42:41.000 に答える
3

探しているのはキーパスです。つまり、そのソフトウェアに一意に関連付けられているレジストリの場所です。
2つのオプションがあります。

  1. ソフトウェアがインストールされている場合にのみ常に存在するレジストリキー。
    例えば。HKEY_CURRENT_USER \ Software \ BitTorrent \ uTorrent
  2. そのソフトウェアの一意のアンインストールエントリを次の場所で確認してください。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall&「ソフトウェアの追加と削除」コントロールパネル拡張機能のタイトルとして使用されるDisplayName
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
    というタイトルのREG_SZが常にここにあります。
于 2012-08-18T13:33:23.820 に答える
2

MsiGetProductInfoWindowsインストーラを使用している場合は、必要な情報が得られる可能性があります。

そうしなかった場合は、問題があります...それは理由があります。

于 2012-08-18T13:27:10.507 に答える