技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

asp.net杀掉进程的实现代码

作者:admin    时间:2012-11-4 6:1:25    浏览:

最近发现任务管理器里又出现wrtsn32.exe这个进程了,drwtsn32.exe是微软Dr Watson错误调试程序,该进程一旦出现就不会自动关闭,其严重了影响服务器的性能,所以需要关闭。关于如何禁止drwtsn32.exe进程的问题,之前曾写文章讨论过,wrtsn32.exe进程如何禁用,但是现在看来这个方法不是很凑效。

asp.net杀掉进程的实现代码

所以,我今天想到用程序来实现我的要求。我用程序来实现的不是如何禁止该进程的出现,而是如何定时的检查并关闭它。下面是asp.net的实现代码。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Diagnostics;
using System.Management;
using System.Net;
using System.IO;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string tempName = "";
        int begpos;
        int endpos;
        foreach (Process thisProc in System.Diagnostics.Process.GetProcesses())
        {
        tempName = thisProc.ToString();
        begpos = tempName.IndexOf("(") + 1;
        endpos = tempName.IndexOf(")");
        tempName = tempName.Substring(begpos, endpos - begpos);
        if (tempName.ToLower().ToString() == "drwtsn32.exe")
        {
                thisProc.Kill();
        }
        }
    }
}

利用上述代码就可以是杀掉drwtsn32.exe进程了。不过,需要注意的是,执行该程序需要系统超级管理员的权限。

不过这只是实现我的目标的第一步,我需要的是定时检测任务管理器进程,一旦发现该进程便关闭它,我该怎样做呢?

利用windows自带的计划任务自动执行程序

其实方法不止一种,我比较喜欢并建议使用的是利用windows自带的计划任务。

首先,把程序写好,测试人工访问程序能否关闭该进程;

第二,需要写一个bat批处理文件,这个文件要实现的是打开浏览器,访问关闭进程的程序,代码参考如下:

@echo off
taskkill /f /im iexplore.exe
start "D:\Program Files\Internet Explorer\IEXPLORE.EXE" http://www.abc.com/kill/

其中http://www.abc.com/kill/就是程序的执行地址。

第三,用windows自带的计划任务,建一个任务,指定什么时间执行这个bat文件,可以每小时或每个几个小时执行一次。

经过以上三个步骤,就可以实现我的目标了。

如果你想通过asp.net列出所有进程或者某进程的用户名,那么可以参考如下写法。

在上面的程序代码的foreach里加入GetProcessUserName(thisProc.Id)这句代码,然后在后面加入函数GetProcessUserName(),代码如下:

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

标签: 脚本  
相关文章
    • IT热文
    • 站长推荐