基本信息
源码名称:遍历 Windows 进程及可卸载程序列表 示例源码
源码大小:0.24M
文件格式:.rar
开发语言:C#
更新时间:2017-12-25
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559

本次赞助数额为: 2 元 
   源码介绍
Windows 进程及可卸载程序列表

检测到的结果保存到 同级目录下了,如下图:

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
using System.IO;
using System.Management;

namespace DetectionSoft
{
    /// <summary>
    /// 显示当前机器的安装程序、运行进程
    /// <para>含杀死特定进程</para>
    /// </summary>
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] ages)
        {
            string OutStr = "";

            if (ages.Length == 0)
                // OutStr = (Pc()   InstallList()).Replace("\r\n", Environment.NewLine);
                OutStr = (Pc()   InstallList()   ProcessList()).Replace("\r\n", Environment.NewLine);
            else
            {
                if (ages[0].ToString() == "Process")
                {
                    if (ages.Length == 1)
                        OutStr = (Pc()   ProcessList()).Replace("\r\n", Environment.NewLine);
                    else
                    {
                        OutStr = DelProcess(ages[1]);
                    }
                }
                else if (ages[0].ToString() == "Install")
                    OutStr = (Pc()   InstallList()).Replace("\r\n", Environment.NewLine);
                else if (ages[0].ToString() == "?")
                {
                    OutStr  = "[Process]:进程列表";
                    OutStr  = "[Process x]:杀死进程ID";
                    OutStr  = "[Install]:安装程序列表";
                }
            }

            Console.WriteLine(OutStr);
            WriteLog(OutStr);
        }

        /// <summary>
        /// 系统信息
        /// </summary>
        /// <returns></returns>
        public static string Pc()
        {
            //系统标识符和版本号 
            string strSystem = Environment.OSVersion.ToString();
            //获取此本地计算机的 NetBIOS 名称 
            string strMN = Environment.MachineName;

            return "系统名称:"   strMN   "\r\n系统版本号:"   strSystem   "\r\n";
        }

        /// <summary>
        /// 安装程序列表
        /// </summary>
        /// <returns></returns>
        private static string InstallList()
        {
            string temp = null, tempType = null;
            object displayName = null, displayDate = null, uninstallString = null, releaseType = null;
            RegistryKey currentKey = null;
            int softNum = 0;
            RegistryKey pregkey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall");//获取指定路径下的键
            try
            {
                foreach (string item in pregkey.GetSubKeyNames())               //循环所有子键
                {
                    currentKey = pregkey.OpenSubKey(item);
                    displayName = currentKey.GetValue("DisplayName");           //获取显示名称
                    displayDate = currentKey.GetValue("InstallDate");           //获取显示时间
                    uninstallString = currentKey.GetValue("UninstallString");   //获取卸载字符串路径
                    releaseType = currentKey.GetValue("ReleaseType");           //发行类型,值是Security Update为安全更新,Update为更新
                    bool isSecurityUpdate = false;
                    if (releaseType != null)
                    {
                        tempType = releaseType.ToString();
                        if (tempType == "Security Update" || tempType == "Update")
                            isSecurityUpdate = true;
                    }

                    if (displayDate == null)
                        displayDate = "";
                    // if (!isSecurityUpdate && displayName != null && uninstallString != null)
                    if (!isSecurityUpdate && displayName != null)
                    {
                        softNum  ;
                        temp  = "    "   displayDate.ToString()   "    "   displayName.ToString()   Environment.NewLine;
                    }
                }
            }
            catch (Exception E)
            {
                MessageBox.Show(E.Message.ToString());
            }
            string Rs = "\r\n共有软件"   softNum.ToString()   "个安装程序"   "\r\n"   temp   "\r\n";
            pregkey.Close();

            return Rs;
        }

        /// <summary>
        /// 当前系统进程列表
        /// </summary>
        /// <returns></returns>
        private static string ProcessList()
        {
            // string Rs = "";
            //获取映射到进程上下文的物理内存量 
            string tmp = "    使用内存:"   Environment.WorkingSet.ToString()   "\r\n";

            //遍历电脑中的进程
            Process[] processes = Process.GetProcesses();
            for (int i = 0; i < processes.GetLength(0); i  )
            {
                tmp  = "    "   processes[i].Id   "  "   processes[i].ProcessName   "  "   GetProcessUserName(processes[i].Id)   ":"   processes[i].MainWindowTitle   "\r\n";

                //我是要找到我需要的YZT.exe的进程,可以根据ProcessName属性判断
                if (processes[i].ProcessName.Equals("YZT"))
                {
                    //立即停止关联的进程,建议不要用Close()方法
                    processes[i].Kill();
                }
            }

            string Rs = "\r\n共有"   processes.GetLength(0)   "个进程在运行"   "\r\n"   tmp;
            return Rs;
        }
        /// <summary>
        /// 根据进程 获取进程用户
        /// </summary>
        /// <param name="pID"></param>
        /// <returns></returns>
        private static string GetProcessUserName(int pID)
        {
            string text1 = null;
            SelectQuery query1 =
                new SelectQuery("Select * from Win32_Process WHERE processID="   pID);
            ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1);
            try
            {
                foreach (ManagementObject disk in searcher1.Get())
                {
                    ManagementBaseObject inPar = null;
                    ManagementBaseObject outPar = null;
                    inPar = disk.GetMethodParameters("GetOwner");
                    outPar = disk.InvokeMethod("GetOwner", inPar, null);

                    text1 = outPar["User"].ToString();
                    break;
                }
            }
            catch
            {
                text1 = "SYSTEM";
            }
            return text1;
        }
        /// <summary>
        /// 杀死进程
        /// </summary>
        /// <param name="id"></param>
        private static string DelProcess(string ProcessID)
        {
            string Rs = "";
            int DelProcessID = 0;
            try { DelProcessID = int.Parse(ProcessID.ToString()); } catch (Exception ex) { }
            if (DelProcessID > 0)
            {
                Process[] processes = Process.GetProcesses();
                for (int i = 0; i < processes.GetLength(0); i  )
                {
                    //我是要找到我需要的YZT.exe的进程,可以根据ProcessName属性判断
                    if (processes[i].Id == DelProcessID)
                    {
                        //立即停止关联的进程,建议不要用Close()方法
                        processes[i].Kill();
                        Rs = "正在尝试杀掉进程!";
                    }
                    else
                        Rs = "进程号不存在!";
                }
            }
            else Rs = "进程号输入错误!";
            return Rs;
        }

        /// <summary>
        /// 输出文本
        /// </summary>
        /// <param name="strLog"></param>
        public static void WriteLog(string strLog)
        {
            string Path = System.Environment.CurrentDirectory;
            //string sFilePath = Path   "\\"   DateTime.Now.ToString("yyyyMM");
            string sFileName = DateTime.Now.ToString("yyyy-MM-dd")   ".log";
            sFileName = Path   "\\"   sFileName; //文件的绝对路径
            //if (!Directory.Exists(sFilePath))//验证路径是否存在
            //{
            //    Directory.CreateDirectory(sFilePath);
            //    //不存在则创建
            //}
            FileStream fs;
            StreamWriter sw;
            if (File.Exists(sFileName))
                File.Delete(sFileName);

            fs = new FileStream(sFileName, FileMode.Create, FileAccess.Write);

            sw = new StreamWriter(fs);
            sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss")   "\r\n"   strLog);
            sw.Close();
            fs.Close();
        }
    }
}