在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → 遍历 Windows 进程及可卸载程序列表 示例源码

遍历 Windows 进程及可卸载程序列表 示例源码

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.24M
  • 下载次数:23
  • 浏览次数:297
  • 发布时间:2017-12-25
  • 实例类别:C#语言基础
  • 发 布 人:clong@qq.com
  • 文件格式:.rar
  • 所需积分:2
 相关标签: windows 进程 可卸载

实例介绍

【实例简介】Windows 进程及可卸载程序列表

【实例截图】检测到的结果保存到 同级目录下了,如下图:

from clipboard

【核心代码】

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();
        }
    }
}

实例下载地址

遍历 Windows 进程及可卸载程序列表 示例源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警