相关疑难解决方法(0)

如何找到已安装的MSI设置的产品GUID?

我需要找到产品GUID对于安装MSI文件,以进行维护,如补丁,卸载,也为审计目的.

powershell install windows-installer wix uninstall

58
推荐指数
1
解决办法
18万
查看次数

如何找到已安装的MSI文件的升级代码?

在某些情况下,可能需要检索已部署软件包的MSI升级代码.

常见场景:

  • 我接管了其他人的MSI项目,我需要确定哪些升级代码用于以前的版本.这是处理升级方案所必需的.我没有任何版本的存档.
  • 我在开发过程中不小心多次更改了我的WiX软件包的升级代码,我需要"在野外"找到所有升级代码版本.我不知道升级代码应该在版本之间保持稳定.

这是一个Q/A风格的问题.

这个问题以各种形式出现过,但这不是重复的.我发布了一种使用主MSI自动化接口(或严格来说WMI)的方法.它应该比先前答案的基于注册表的方法更可靠.这个答案也试图总结其他检索方法.

vbscript powershell wmi windows-installer wix

12
推荐指数
1
解决办法
7972
查看次数

从MSI文件中查找GUID

如何在Windows中列出已安装程序的GUID?或者,如果我有MSI文件,是否更容易找到GUID?

我正在通过Orca查看MSI文件,但不确定在哪里查找GUID.

谢谢!

windows windows-installer guid

11
推荐指数
3
解决办法
5万
查看次数

WMI-从Win32_Product中选择需要很长时间

我正在枚举使用WMI安装的应用程序,而无论我如何构造它,此块都需要花费较长的时间才能完成。每次在我的环境中花费13秒。有没有更好(更快)的方法来检查程序是否已安装?(我使用iTunes作为示例程序进行检查)

    private static string Timestamp
    {
        get { return DateTime.Now.ToString("HH:mm:ss.ffff"); }
    }

    private static void LoadInstalledPrograms()
    {
        List<string> installedPrograms = new List<string>();
        Console.WriteLine("0 - {0}", Timestamp);
        ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
        Console.WriteLine("1 - {0}", Timestamp);
        ManagementObjectCollection managementObjectCollection = mos.Get();
        Console.WriteLine("2 - {0}", Timestamp);
        foreach (ManagementObject mo in managementObjectCollection)
        {
            installedPrograms.Add(mo["Name"].ToString());
        }
        Console.WriteLine("3 - {0}", Timestamp);
        Console.WriteLine("Length - {0}", installedPrograms.Count);
    }
Run Code Online (Sandbox Code Playgroud)

选择*从Win32_Product

0 - 08:08:51.3762
1 - 08:08:51.3942
2 - 08:08:51.4012
3 - 08:09:04.8326
Length - 300
Run Code Online (Sandbox Code Playgroud)

SELECT …

c# wmi wmi-query

3
推荐指数
1
解决办法
7449
查看次数