文档章节

C#杀死Explorer(资源管理器)

webcreazy
 webcreazy
发布于 2016/04/16 20:14
字数 1153
阅读 289
收藏 2

Form1.Designer.cs

namespace WindowsFormsApplicationKillExplorer
{
    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Windows 窗体设计器生成的代码
        /// <summary>
        /// 设计器支持所需的方法 - 不要
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button2 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(66, 486);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "杀死进程";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(15, 12);
            this.textBox1.Multiline = true;
            this.textBox1.Name = "textBox1";
            this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
            this.textBox1.Size = new System.Drawing.Size(382, 467);
            this.textBox1.TabIndex = 2;
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(270, 486);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(75, 23);
            this.button2.TabIndex = 3;
            this.button2.Text = "启动进程";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(407, 521);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();
        }
        #endregion
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button button2;
    }
}

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace WindowsFormsApplicationKillExplorer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text += Environment.NewLine + cmdkill(true);
            //killProcess("explorer");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text += Environment.NewLine + cmdkill(false);
        }


        /// <summary>
        /// 以杀死进程的方式杀死explorer
        /// </summary>
        /// <param name="name">要杀死的进程友好名(无 .exe)</param>
        static public void killProcess(string name)
        {
            try
            {
                Process[] myProcesses = Process.GetProcesses();
                foreach (Process myProcess in myProcesses)
                {
                    if (name == myProcess.ProcessName)
                        myProcess.Kill();
                }
            }
            catch (Exception ee)
            {
                //抛出异常
                MessageBox.Show(ee.Message);
            }
        }

        //static public void cmdkill(string name)
        //{
        //    string str = @"taskkill /f /im explorer.exe";
        //    Process p = new Process();                                    //建立外部调用线程
        //    p.StartInfo.FileName = "ffmpeg.exe";                          //要调用外部程序的绝对路径
        //    p.StartInfo.Arguments = str;                                  //参数(这里就是FFMPEG的参数了)
        //    p.StartInfo.UseShellExecute = false;                          //不使用操作系统外壳程序启动线程(一定为FALSE,详细的请看MSDN)
        //    p.StartInfo.RedirectStandardError = true;                     //把外部程序错误输出写到StandardError流中(这个一定要注意,FFMPEG的所有输出信息,都为错误输出流,用StandardOutput是捕获不到任何消息的...mencoder就是用standardOutput来捕获的)
        //    p.StartInfo.CreateNoWindow = true;                            //不创建进程窗口
        //    p.ErrorDataReceived += new DataReceivedEventHandler(Output);  //外部程序(这里是FFMPEG)输出流时候产生的事件,这里是把流的处理过程转移到下面的方法中,详细请查阅MSDN
        //    p.Start();                                                    //启动线程
        //    p.BeginErrorReadLine();                                       //开始异步读取
        //    p.WaitForExit();                                              //阻塞等待进程结束
        //    p.Close();                                                    //关闭进程
        //    p.Dispose();                                                  //释放资源
        //    //return true;
        //}
        #region 第一种运行CMD的方式
        /// <summary>
        /// 调用CMD命令来杀死或重启进程
        /// </summary>
        /// <param name="a">杀死或重启进程</param>
        /// <returns>cmd命令返回</returns>
        public static string cmdkill(bool a)
        {
            string str;
            //string str = Console.ReadLine();
            if (a)
            {
                str = @"taskkill /f /im explorer.exe";
            }
            else
            {
                //str = @"C:\Windows\explorer.exe";
                str = @"explorer.exe";
            }
            Process p = new Process();
            p.StartInfo.FileName = "cmd";
            p.StartInfo.UseShellExecute = false;                 //是否使用操作系统shell启动
            p.StartInfo.RedirectStandardInput = true;            //接受来自调用程序的输入信息
            p.StartInfo.RedirectStandardOutput = true;           //由调用程序获取输出信息
            p.StartInfo.RedirectStandardError = true;            //重定向标准错误输出
            p.StartInfo.CreateNoWindow = true;                   //不显示程序窗口
            p.Start();                                           //启动程序
            //向cmd窗口发送输入信息
            p.StandardInput.WriteLine(str + "&exit");
            //p.StandardInput.WriteLine(str);
            p.StandardInput.AutoFlush = true;
            //p.StandardInput.WriteLine("exit");
            //向标准输入写入要执行的命令。这里使用&是批处理命令的符号,表示前面一个命令不管是否执行成功都执行后面(exit)命令,如果不执行exit命令,后面调用ReadToEnd()方法会假死
            //同类的符号还有&&和||前者表示必须前一个命令执行成功才会执行后面的命令,后者表示必须前一个命令执行失败才会执行后面的命令

            //获取cmd窗口的输出信息
            string output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();//等待程序执行完退出进程
            p.Close();
            return output;
        }
        #endregion

        #region 第二种运行CMD的方式
        /// <summary>
        /// 运行cmd命令
        /// 会显示命令窗口
        /// </summary>
        /// <param name="cmdExe">指定应用程序的完整路径</param>
        /// <param name="cmdStr">执行命令行参数</param>
        static bool RunCmd(string cmdExe, string cmdStr)
        {
            bool result = false;
            try
            {
                using (Process myPro = new Process())
                {
                    //指定启动进程是调用的应用程序和命令行参数
                    ProcessStartInfo psi = new ProcessStartInfo(cmdExe, cmdStr);
                    myPro.StartInfo = psi;
                    myPro.Start();
                    myPro.WaitForExit();
                    result = true;
                }
            }
            catch
            {
            }
            return result;
        }
        /// <summary>
        /// 运行cmd命令
        /// 不显示命令窗口
        /// </summary>
        /// <param name="cmdExe">指定应用程序的完整路径</param>
        /// <param name="cmdStr">执行命令行参数</param>
        static bool RunCmd2(string cmdExe, string cmdStr)
        {
            bool result = false;
            try
            {
                using (Process myPro = new Process())
                {
                    myPro.StartInfo.FileName = "cmd.exe";
                    myPro.StartInfo.UseShellExecute = false;
                    myPro.StartInfo.RedirectStandardInput = true;
                    myPro.StartInfo.RedirectStandardOutput = true;
                    myPro.StartInfo.RedirectStandardError = true;
                    myPro.StartInfo.CreateNoWindow = true;
                    myPro.Start();
                    //如果调用程序路径中有空格时,cmd命令执行失败,可以用双引号括起来 ,在这里两个引号表示一个引号(转义)
                    string str = string.Format(@"""{0}"" {1} {2}", cmdExe, cmdStr, "&exit");
                    myPro.StandardInput.WriteLine(str);
                    myPro.StandardInput.AutoFlush = true;
                    myPro.WaitForExit();
                    result = true;
                }
            }
            catch
            {
            }
            return result;
        }
        #endregion
    }
}

© 著作权归作者所有

webcreazy
粉丝 4
博文 28
码字总数 14000
作品 0
大连
程序员
私信 提问
Explorer.EXE进程自动重启的故事

很早就发现一个奇怪的现象了,如果你使用任务管理器杀死Explorer.EXE,Windows不会将Explorer.EXE自动唤起,但是如果你自己使用TerminateProcess() 函数结束Explorer.EXE进程,你会发现一个奇...

伽罗kapple
2016/01/21
354
0
点击页面中的一按钮,显示计算机桌面

当任务栏里没有“显示桌面图标”时 可在记事本中写: [Shell] Command=2 IconFile=explorer.exe,3 [Taskbar] Command=ToggleDesktop 备注:保存成.scf 格式 javascript: <script language="......

Cherish_you
2012/03/22
84
0
Windows资源管理器命令行参数

 使用命令行参数,您既可以自定义 Windows 资源管理器启动时使用的默认视图,也可以指定在从命令提示符启动时所看到的视图。   您可以在 Explorer.exe 命令中使用以下参数。   参数 结果...

mj4738
2013/01/24
246
0
Visual Studio中C#添加引用图文详解(using MySql.Data.MySqlClient;无法使用)

使用C#连接MySQL时,遇到命名空间using MySql.Data.MySqlClient;无法使用。这是因为VS中没有添加此引用,解决方法如下: (1)下载MySQL.Data.dll,(https://blog.csdn.net/u011966339/arti...

beerbread134
2018/05/14
0
0
使用Visual Studio Code开发.NET Core看这篇就够了

作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9926078.html 在本文中,我将带着大家一步一步的通过图文的形式来演示如何在Visual Studio Code中进行.NET Core程序的开发,测试...

依乐祝
2018/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
今天
7
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
5
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
5
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
3
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部