簡體   English   中英

如果我知道MSI GUID,如何在注冊表中找到程序位置?

[英]How to find program location in registry, if I know MSI GUID?

我已經安裝了一些帶有GUID的MSI(0733556C-37E8-4123-A801-D3E6C5151617)。 在注冊表中注冊的程序:HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Windows \\ CurrentVersion \\ Uninstall \\()

值UninstallString = MsiExec.exe / I(0733556C-37E8-4123-A801-D3E6C5151617)

我的問題是:實用程序MsiExec.exe如何知道刪除程序時要運行的文件的名稱和路徑? 在注冊表中哪里可以找到這些信息?

Windows會在注冊表中隱藏和加密Windows Installer配置信息。 用戶眼睛無法瀏覽,因為注冊表的其他部分也是如此。

要查詢/修改/刪除此信息,您需要使用MSI功能。
安裝程序功能參考

對於您的特定問題,請嘗試MsiGetProductInfo函數。

這是一個簡單的c#程序,使用MsiGetProductInfo,如William Leara所說,用於獲取緩存安裝程序在磁盤上的實際位置。

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子項,如果不存在,嘗試找到其他結果。 找到InstallProperties后,打開並找到LocalPackage密鑰。 然后,您將獲得MSI在安裝應用程序時保存為Cache的msi包的路徑。

此問題的前提是誤導,因為在執行卸載時不使用注冊表中的UninstallString。 繼續並更改字符串以測試它 - 它不會使用您更改的字符串。

盡管對注冊表中的內容的引用可能很有吸引力,但簡短的回答是注冊表中的Windows Installer數據是實現細節。 問題基本上是詢問MsiConfigureProduct(.... INSTALLSTATE_ABSENT ...)是如何工作的,猜測實現細節以及它在注冊表中的位置毫無意義。 它的API一路下來。 海報可能已經想要完成一項實際任務,但它被卸載工作的問題掩蓋了。

該鍵映射到HKEY_CLASSES_ROOT\\Installer\\Products\\

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM