MSI GUIDを知っている場合、レジストリでプログラムの場所を見つける方法は?
-
28-09-2019 - |
質問
GUID(0733556C-37E8-4123-A801-D3E6C5151617)を備えたMSIをインストールしました。レジストリに登録されているプログラム:hkey_local_machine software microsoft windows currentversion uninstall ()
値UninstallString = msiexec.exe / i(0733556C-37E8-4123-A801-D3E6C5151617)
私の質問は、プログラムを削除したときに実行するファイルへの名前とパスをユーティリティMSIEXEC.EXEをどのように知っていますか?レジストリのどこでこの情報が見つかりますか?
解決
Windowsは、Windowsインストーラーの構成情報を非表示に保ち、レジストリで暗号化されます。レジストリの他の部分がそうであるように、それは人間の目で閲覧できません。
この情報を照会/変更/削除するには、MSI関数を使用する必要があります。
(インストーラー機能リファレンス)
特定の質問については、機能を試してください msigetproductinfo.
他のヒント
William Learaが言うように、MsigetProductinfoを使用して、ディスク上のキャッシュインストーラーの実際の場所を取得する簡単なC#プログラムを次に示します。
class Program
{
static void Main(string[] args)
{
Int32 len = 512;
System.Text.StringBuilder builder = new System.Text.StringBuilder(len);
MsiGetProductInfo("{89C098E5-C108-49F9-9B1D-10503C6D8A05}", "LocalPackage", builder, ref len);
Console.WriteLine(builder.ToString());
Console.ReadLine();
}
[DllImport("msi.dll", CharSet = CharSet.Unicode)]
static extern Int32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, ref Int32 len);
}
コマンドラインから試してみることができます。
wmic product where "Name like '%your software here%'" get Name, Version, PackageCode
Tarma Software Researchの無料ユーティリティがあり、これに役立つと思いました。から入手してください 彼らのウェブサイト.
ソフトウェアは必要ありません。これはWindows 10で機能しており、Windows 7にも有効だと思います。
製品コードが0733556C-37E8-4123-A801-D3E6C5151617の場合。キーC65533708E7332148A103D6E5C516171(基本的に逆転している)を見つけてみてください。 InstallPropertiesを見つけたら、ローカルパッケージキーを開いて見つけます。そして、アプリケーションをインストールしたときにMSIがキャッシュとして保存するMSIパッケージのパスがあります。
この質問の前提は、アンインストールを行うときにレジストリ内のアンインストールストリングが使用されないため、誤解を招くものです。先に進み、文字列を変更してこれをテストします - 変更された文字列は使用しません。
レジストリ内のものへの言及は魅力的かもしれませんが、短い答えは、レジストリのWindowsインストーラーデータが実装の詳細であるということです。問題は、基本的にmsiconfigureproduct(.... installstate_absent ...)がどのように機能するかを尋ねることであり、実装の詳細とそれがレジストリ内の可能性を推測することは無意味です。それはずっとダウンしています。ポスターが達成したいと思っていたかもしれない実際のタスクがあったかもしれませんが、それはアンインストールがどのように機能するかについての疑問によって隠されています。
そのキーマップに HKEY_CLASSES_ROOT\Installer\Products\
.