首页
社区
课程
招聘
让net程序挂起的简单方法
发表于: 2010-8-10 12:20 7570

让net程序挂起的简单方法

2010-8-10 12:20
7570
有什么简单办法可以让一个net程序在运行一段时间后挂起?再问一个,profiler.dll不起作用是怎么回事?我设置了环境,用了例子提供的测试程序就是没效果?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 160
活跃值: (29)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
第一个问题:任何一个进程管理器都可以让它挂起和恢复,这和系统中的其它进程没区别.至于运行一段时间,那只好加个timer了.省事儿的方法大概是先call这个进程并计时,在计时器中call进程管理器挂起刚才call的进程.代码网上搜一下吧,很多. 进程挂起其实就是获取进程ID,遍历其线程并Suspend,恢复则Resume.

您可以参见http://hi.baidu.com/netelife/blog/item/04bdff80eecaf2d49023d9de.html

第二个问题:你用的什么例子?哪年的例子?如果没猜错的话,可能是版本的原因,你的Profiler在实现接口时和你的.net版本没对应.再一种可能就是微软的大例子程序(什么事件都拦截),要等N久才会出现效果.

您可以参见坛中的文章:http://bbs.pediy.com/showthread.php?t=113697
2010-8-10 18:46
0
雪    币: 337
活跃值: (74)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
简单化考虑的话,直接调用ntdll.dll中的API就成了,下面是简单的C#代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices; 

namespace Win1
{
    public partial class Form1 : Form
    {
        //引入api
        [DllImport("ntdll.dll")]
        public static extern int ZwSuspendProcess(IntPtr ProcessId);
        [DllImport("ntdll.dll")]
        public static extern int ZwResumeProcess(IntPtr ProcessId);

        Process myProcess;
        public Form1()
        {
            InitializeComponent();
        }

        //启动一个.net程序
        private void button1_Click(object sender, EventArgs e)
        {
            myProcess = new Process();
            myProcess.StartInfo.FileName = "Win2.exe";
            myProcess.StartInfo.CreateNoWindow = true;
            myProcess.Start();
        }
        
        //挂起进程
        private void button2_Click(object sender, EventArgs e)
        {
            ZwSuspendProcess(myProcess.Handle);
        }
        
        //恢复进程
        private void button3_Click(object sender, EventArgs e)
        {
            ZwResumeProcess(myProcess.Handle);
        }
        
        //到指定时间挂起进程
        private void timer1_Tick(object sender, EventArgs e)
        {
            ZwSuspendProcess(myProcess.Handle);
            this.timer1.Enabled = false;//关Timer
        }

    }
}
2010-8-10 20:07
0
游客
登录 | 注册 方可回帖
返回
//