gpt4 book ai didi

c# - 如何获得已安装软件产品的列表?

转载 作者:可可西里 更新时间:2023-11-01 13:50:27 48 4
gpt4 key购买 nike

如何获取系统上安装的软件产品列表。我的目标是遍历这些,并获得其中一些的安装路径。

PSEUDOCODE(结合多种语言 :))

foreach InstalledSoftwareProduct
if InstalledSoftwareProduct.DisplayName LIKE *Visual Studio*
print InstalledSoftwareProduct.Path

最佳答案

您可以使用 MSI api 函数来枚举所有已安装的产品。您将在下面找到执行此操作的示例代码。

在我的代码中,我首先枚举所有产品,获取产品名称,如果它包含字符串“Visual Studio”,我检查 InstallLocation 属性。但是,并不总是设置此属性。我不确定这是否不是要检查的正确属性,或者是否有另一个属性始终包含目标目录。也许从 InstallLocation 属性中检索到的信息对您来说已经足够了?

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

class Program
{
[DllImport("msi.dll", CharSet = CharSet.Unicode)]
static extern Int32 MsiGetProductInfo(string product, string property,
[Out] StringBuilder valueBuf, ref Int32 len);

[DllImport("msi.dll", SetLastError = true)]
static extern int MsiEnumProducts(int iProductIndex,
StringBuilder lpProductBuf);

static void Main(string[] args)
{
StringBuilder sbProductCode = new StringBuilder(39);
int iIdx = 0;
while (
0 == MsiEnumProducts(iIdx++, sbProductCode))
{
Int32 productNameLen = 512;
StringBuilder sbProductName = new StringBuilder(productNameLen);

MsiGetProductInfo(sbProductCode.ToString(),
"ProductName", sbProductName, ref productNameLen);

if (sbProductName.ToString().Contains("Visual Studio"))
{
Int32 installDirLen = 1024;
StringBuilder sbInstallDir = new StringBuilder(installDirLen);

MsiGetProductInfo(sbProductCode.ToString(),
"InstallLocation", sbInstallDir, ref installDirLen);

Console.WriteLine("ProductName {0}: {1}",
sbProductName, sbInstallDir);
}
}
}
}

关于c# - 如何获得已安装软件产品的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3526449/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com