我已经使用GUID(0733556C-37E8-4123-A801-D3E6C515151617)安装了一些MSI。注册表中注册的程序:hkey_local_machine software microsoft windows currentversion uninstall ()

值uninstallstring = msiexec.exe / i(0733556C-37E8-4123-A801-D3E6C515151617)

我的问题是:效用MSIEXEC.EXE如何知道您要运行的文件的名称和路径?在注册表中,可以找到此信息?

有帮助吗?

解决方案

Windows将Windows安装程序配置信息隐藏在注册表中。它不像注册表的其他部分那样从人眼中浏览。

要查询/修改/删除此信息,您需要使用MSI功能。
(安装程序功能参考)

对于您的特定问题,请尝试该功能 msigetproductinfo.

其他提示

如William Leara所说,这是一个简单的C#程序,它使用MSIGETProductInfo,以获取磁盘上缓存的安装程序的实际位置。

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

我发现塔尔马软件研究的免费公用事业对此很有帮助。从中获取 他们的网站.

您不需要任何软件。这在Windows 10中工作,我认为它对Windows 7也有效。

如果您的产品代码为0733556C-37E8-4123-A801-D3E6C5151617。尝试查找密钥C65533708E7332148A103D6E5C516171(基本上是反转),一旦找到它,请浏览installproperties subkey,如果不存在,请尝试找到其他结果。找到安装properties后,打开并找到localpackage键。然后,您将拥有MSI包装的路径,当您安装应用程序时,MSI将其保存为缓存。

这个问题的前提是误导性的,因为在进行卸载时未使用注册表中的卸载。继续并更改字符串进行测试 - 它不会使用您的修改后的字符串。

尽管注册表中对内容的引用可能很吸引人,但简短的答案是注册表中的Windows安装程序数据是实现细节。问题基本上是在询问MsiconFigureProduct(.... InstallState_absent ...)如何起作用,并且猜测实现详细信息以及在注册表中的位置毫无意义。一直是API。海报可能想完成的实际任务可能是一项实际任务,但是它被卸载方式的问题掩盖了。

那关键地图 HKEY_CLASSES_ROOT\Installer\Products\.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top