2011-08-26 41 views
1

我试图从特定已安装应用程序(如安装文件夹,卸载字符串,版本号等等)中检索数据。当我运行以下代码时,我获取安装文件夹,但它会为UninstallString值返回四行问号。有任何想法吗?如何获取已安装程序的卸载字符串

public static void FindInstalled(string AppName) 
    { 
     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(AppName)) 
      { 
       Int32 installDirLen = 1024; 
       StringBuilder sbInstallDir = new StringBuilder(installDirLen); 

       MsiGetProductInfo(sbProductCode.ToString(), "InstallLocation", sbInstallDir, ref installDirLen); 
       Console.Writeline("Install Directory - {0}",sbInstallDir.ToString()); 

       MsiGetProductInfo(sbProductCode.ToString(), "UninstallString", sbInstallDir, ref installDirLen); 
       Console.Writeline("Uninstall String - {0}", sbInstallDir.ToString()); 

      } 
     } 
    } 

回答

1

UninstallString不是有效的属性。有关有效属性的列表,请参见http://msdn.microsoft.com/en-us/library/aa370130(VS.85).aspx

如果您打开Windows Installer头文件(“msi.h”)并搜索文本“UninstallString”,您将无法找到它。另外,如果您查看http://msdn.microsoft.com/en-us/library/aa370905(VS.85).aspx的属性参考并搜索该页面的“UninstallString”,您也不会找到它。

我的建议是读取注册表中的属性。有关详细信息,请参见http://msdn.microsoft.com/en-us/library/aa372105(VS.85).aspx。你可以从中得到你需要的细节。

0

怎么是这样的:

public static void FindInstalled(AppName) 
    { 
     RegistryKey myRegKey = Registry.LocalMachine; 
     myRegKey = myRegKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"); 
     String[] subkeyNames = myRegKey.GetSubKeyNames(); 
     foreach (String s in subkeyNames) 
     { 
      RegistryKey UninstallKey = Registry.LocalMachine; 
      UninstallKey = UninstallKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + s); 
      Object oValue = UninstallKey.GetValue("DisplayName"); 

      if (oValue != null) 
      { 
       if (oValue.ToString() == AppName) 
       { 
        oValue = UninstallKey.GetValue("UninstallString"); 
        Console.Writeline("Uninstall URL - {0}", oValue.ToString()); 
        break; 
       } 
      } 
     } 
    } 
相关问题