如何使用C获取已安装的应用程序软件列表?我有一个C#的解决方案。这是C#代码:
System Microsoft.Win32
private string Getinstalledsoftware() {
string Software = null;
string SoftwareKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(SoftwareKey)) {
foreach (string skName in rk.GetSubKeyNames()) {
using (RegistryKey sk = rk.OpenSubKey(skName)) {
try {
if (!(sk.GetValue("DisplayName") == null)) {
if (sk.GetValue("InstallLocation") == null)
Software += sk.GetValue("DisplayName") + " - Install path not known\n";
else
Software += sk.GetValue("DisplayName") + " - " + sk.GetValue("InstallLocation") + "\n";
}
}
catch (Exception ex) {
}
}
}
}
return Software;
}
如何将C#代码转换为C代码?
答案 0 :(得分:2)
如果您希望执行翻译,则需要将此处执行的操作映射到相应的Windows API registry functions和其他string manipulation函数。
否则您可以使用Windows Installer API直接执行此操作。
以下是使用安装程序API转储产品的示例:
#include <stdio.h>
#include <Windows.h>
#include <Msi.h>
static UINT msierrno;
#define PRODUCT_NAME_SIZE 512
#define INSTALL_LOCATION_SIZE 512
int main(void)
{
DWORD index;
TCHAR productCode[39];
for (index = 0; (msierrno = MsiEnumProducts(index, productCode)) == ERROR_SUCCESS; index++)
{
TCHAR productName[PRODUCT_NAME_SIZE];
TCHAR installLocation[INSTALL_LOCATION_SIZE];
DWORD productNameSize = PRODUCT_NAME_SIZE;
DWORD installLocationSize = INSTALL_LOCATION_SIZE;
wprintf(L"product code: %s\n", productCode);
if ((msierrno = MsiGetProductInfo(productCode, INSTALLPROPERTY_INSTALLEDPRODUCTNAME, productName, &productNameSize)) != ERROR_SUCCESS)
{
/* handle error */
}
else wprintf(L"\tproduct name: %s\n", productName);
if ((msierrno = MsiGetProductInfo(productCode, INSTALLPROPERTY_INSTALLLOCATION, installLocation, &installLocationSize)) != ERROR_SUCCESS)
{
/* handle error */
}
else wprintf(L"\tinstall location: %s\n", installLocation);
}
return 0;
}
p.s。,您需要链接到msi.lib / dll库。
答案 1 :(得分:1)
你可以这样:
当然,您也可以在没有第1步的情况下直接转到第2步。