Advertisement

C#获取32位或者64位系统安装软件信息

阅读量:
复制代码
 using System;

    
 using System.Collections.Generic;
    
 using System.Text;
    
 using Jxmstc.common.Network;
    
 using System.Collections;
    
 using Microsoft.Win32;
    
 using System.Windows.Forms;
    
 using System.IO;
    
 using System.Web;
    
 using System.Data;
    
 using Jxmstc.scvmm.Utils;
    
 using System.Management;
    
  
    
 namespace Jxmstc.vm.operation
    
 {
    
     /* *获取虚拟机中安装软件信息
    
      */
    
     class InstallSoftData : BaseOpertaion
    
     {
    
     private string sReturnMessage = string.Empty;
    
     HttpProcessor p;
    
     string addressWidth = String.Empty;
    
  
    
     private new static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    
  
    
  
    
     public override void Excute(Hashtable htParameters, HttpProcessor _p)
    
     {
    
         //保存返回的Json格式安装的软件信息
    
         p = _p;
    
         string bit32 = string.Empty;
    
         string bit64 = string.Empty;
    
         RegistryKey localMachine;
    
         RegistryKey Uninstall;
    
         string sInstallSoftsData = "";
    
  
    
         //将客户机中安装的软件信息保存在DataTable中
    
         DataTable dt = new DataTable();
    
  
    
         dt.Columns.Add("SoftName");
    
         dt.Columns.Add("SoftVersion");
    
         dt.Columns.Add("SoftPublisher");
    
         
    
  
    
         string sIs64or32System = Distinguish64or32System();
    
         
    
         if (sIs64or32System.Equals("32"))
    
         {
    
             // 如果是32位操作系统,(或者系统是64位,程序也是64位)
    
             bit32 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    
             localMachine = Registry.LocalMachine;
    
             Uninstall = localMachine.OpenSubKey(bit32, true);
    
  
    
         }
    
         else if (sReturnMessage.Equals("default"))
    
         {
    
             //默认为32位
    
             bit32 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    
             localMachine = Registry.LocalMachine;
    
             Uninstall = localMachine.OpenSubKey(bit32, true);
    
         }
    
         else
    
         {
    
             // 如果操作系统是64位并且程序是64位的
    
             bit64 = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
    
             localMachine = Registry.LocalMachine;
    
             Uninstall = localMachine.OpenSubKey(bit64, true);
    
         }
    
  
    
         DataTable _dt = ListInstallSofts(Uninstall, dt, sIs64or32System);
    
         sInstallSoftsData = ToJson.DataTableToJSON(_dt);
    
  
    
         p.WriteSuccess();
    
         p.outputStream.WriteLine(HttpUtility.UrlEncode("Success"));
    
         p.outputStream.WriteLine(sInstallSoftsData);
    
  
    
     }
    
  
    
     private  DataTable ListInstallSofts(RegistryKey Uninstall, DataTable dt, String is32Or64)
    
     {
    
  
    
         foreach (string subkey in Uninstall.GetSubKeyNames())
    
         {
    
             try
    
             {
    
                 if (subkey == null)
    
                 {
    
                     continue;
    
                 }
    
  
    
                 else
    
                 {
    
                     RegistryKey currentKey = Uninstall.OpenSubKey(subkey);
    
                     DataRow dr = dt.NewRow();
    
                     dr["SoftName"] = currentKey.GetValue("DisplayName");
    
                     dr["SoftVersion"] = currentKey.GetValue("displayversion");
    
                     dr["SoftPublisher"] = currentKey.GetValue("publisher");
    
                     if (dr["SoftName"].ToString().Equals("") || dr["SoftName"].ToString().Contains("Update") || dr["SoftName"].ToString().Contains("SP1") || dr["SoftName"].ToString().Contains("SP3") || dr["SoftName"].ToString().Contains("修补程序") || dr["SoftName"].ToString().Contains("安全更新") || dr["SoftName"].ToString().Contains("更新"))
    
                     { }
    
                     else if (DeleteTheValue(dt, dr["SoftName"].ToString()))
    
                     { }
    
                     else
    
                         dt.Rows.Add(dr);
    
                 }
    
             }
    
             catch (Exception ex)
    
             {
    
                 p.WriteSuccess();
    
                 p.outputStream.WriteLine(ex.Message);
    
                 log.Debug(ex.Message);
    
                 log.Info(ex.Message);
    
             }
    
         }
    
         Uninstall.Close();
    
         //64位操作系统安装了32位软件
    
         if(is32Or64.Equals("64"))
    
         {
    
             const string bit32 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    
             RegistryKey localMachine = Registry.LocalMachine;
    
             Uninstall = localMachine.OpenSubKey(bit32, true);
    
             ListInstallSofts(Uninstall, dt, "32");
    
             Uninstall.Close();
    
         }
    
  
    
  
    
         return dt;
    
     }
    
  
    
     private static bool DeleteTheValue(DataTable dt, string softName)
    
     {
    
         for (int i = 0; i < dt.Rows.Count; i++)
    
         {
    
             if (dt.Rows[i][0].ToString().Equals(softName))
    
             {
    
                 return true;
    
             }
    
         }
    
         return false;
    
     }
    
  
    
     private string Distinguish64or32System()
    
     {
    
         try
    
         {
    
             ConnectionOptions mConnOption = new ConnectionOptions();
    
             ManagementScope mMs = new ManagementScope("\ \ localhost", mConnOption);
    
             ObjectQuery mQuery = new ObjectQuery("select AddressWidth from Win32_Processor");
    
             ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(mMs, mQuery);
    
             ManagementObjectCollection mObjectCollection = mSearcher.Get();
    
             foreach (ManagementObject mObject in mObjectCollection)
    
             {
    
                 addressWidth = mObject["AddressWidth"].ToString();
    
             }
    
             return addressWidth;
    
         }
    
         catch (Exception ex)
    
         {
    
             p.WriteSuccess();
    
             p.outputStream.WriteLine(ex.Message);
    
             log.Debug(ex.Message);
    
             log.Info(ex.Message);
    
             sReturnMessage = "default";
    
             return sReturnMessage;
    
         }
    
     }
    
  
    
  
    
     }
    
 }
    
    
    
    
    AI写代码

全部评论 (0)

还没有任何评论哟~