90720
いつもお世話になっております。

PC にインストールされているソフトウェアの情報を取得するツールを開発中です。  
インストールされているソフトウェアの一覧は以下のレジストリを参照することで取得することができました。

```

    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
    
```

上記レジストリにある "InstallLocation" が、そのソフトウェアのインストール先のパスだと認識しております。  
ただ、ソフトウェアによっては "InstallLocation"
の値が空になっているものがあり、そのソフトウェアについてはインストール先のパスが分からない状況です。  
"InstallLocation" の値が空になっているソフトウェアのインストール先のパスを取得方法はありますでしょうか？  
また、レジストリを参照する以外でインストールソフトウェアの情報を取得する方法が他にございましたら併せてご教示いただければ幸いです。

よろしくお願い申し上げます。
CC BY-SA 4.0
2022-08-23T05:57:05.840
90711
2022-08-23T12:55:41.047
54118
question
c# windows
インストールされているソフトウェアのパスの取得方法
歴史的経緯もあり、インストーラー仕様は統一されておらず、最悪アンインストール時に実行すべきファイル名だけの場合もあります。  
MSI（Windows Installer）が現在の標準、と言いたいところですがストアアプリが登場したりMSIXが登場したり、相変わらずの乱立状態です。

そのため、回答としては「存在しない」となります。

* * *

一応、MSIについてもう少し説明しておくと、[Windows Installer](https://docs.microsoft.com/en-
us/windows/win32/msi/windows-installer-
portal)として説明されており、[内部のデータベース仕様](https://docs.microsoft.com/en-
us/windows/win32/msi/database-
tables)もあります。APIもありますが質問のような用途には[スクリプトインターフェース](https://docs.microsoft.com/en-
us/windows/win32/msi/automation-interface)も用意されています。  
（スクリプトインターフェースはC#の`dynamic`で扱えますので）
CC BY-SA 4.0
2022-08-23T12:55:41.047
90720
2022-08-23T12:55:41.047
4236
90711
answer