[英]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.