C#遍历进程和根据进程识别码进程的问题
我做了个软件,他能禁止安装360,原理很简单,就是有个timer,然后在进程里不停的找他的安装程序名,
如果别人不改这个名字,没有问题,能关掉要杀的进程。
可是如果别人把名子改了,比如setup.exe是我要杀的,现在他给改成“a.exe”了,这时,在进程里就找不到setup.exe了
就杀不掉了。
这样是不满足要求的!
我想了个方法,就是找出每个exe的关键码,比如用winhex打开360的安装程序,里面肯定有www.360.cn这几个字,
我现在想遍历所有进程,读出每个进程的内容,然后找里面有www.360.cn吗,
如果有,说明这个程序肯定和360有关,就可以杀了他的安装程序。
请给我些代码。
string filename = Application.StartupPath+ "\\inst.exe";
FileStream fs = File.OpenRead(filename);
byte[] data = new byte[fs.Length];
SafeRead(fs, data);
string str = System.Text.Encoding.Default.GetString(data);
//MessageBox.Show(str.Length.ToString());
int i = str.IndexOf("www.360.cn");//这是识别码
if (i > 0)
MessageBox.Show("找到");
现在的问题是:怎么样遍历所有进程,读出每个进程的内容,然后找里面有www.360.cn吗,
System.Diagnostics.Process[] p;
for (int i = 0; i < p.Length; i++)
{
}
我做了个软件,他能禁止安装360,原理很简单,就是有个timer,然后在进程里不停的找他的安装程序名,
如果别人不改这个名字,没有问题,能关掉要杀的进程。
可是如果别人把名子改了,比如setup.exe是我要杀的,现在他给改成“a.exe”了,这时,在进程里就找不到setup.exe了
就杀不掉了。
这样是不满足要求的!
我想了个方法,就是找出每个exe的关键码,比如用winhex打开360的安装程序,里面肯定有www.360.cn这几个字,
我现在想遍历所有进程,读出每个进程的内容,然后找里面有www.360.cn吗,
如果有,说明这个程序肯定和360有关,就可以杀了他的安装程序。
请给我些代码。
string filename = Application.StartupPath+ "\\inst.exe";
FileStream fs = File.OpenRead(filename);
byte[] data = new byte[fs.Length];
SafeRead(fs, data);
string str = System.Text.Encoding.Default.GetString(data);
//MessageBox.Show(str.Length.ToString());
int i = str.IndexOf("www.360.cn");//这是识别码
if (i > 0)
MessageBox.Show("找到");
现在的问题是:怎么样遍历所有进程,读出每个进程的内容,然后找里面有www.360.cn吗,
System.Diagnostics.Process[] p;
for (int i = 0; i < p.Length; i++)
{
}
Process[] processes = Process.GetProcesses();
foreach(Process process in processes)
{
//调用你写的方法判断。。
}
不需要,這種方法會慢死,而且消耗資源極多.
直接獲取窗口名稱進行判斷.
如果覺得不夠Process里面還有很多東西可以判斷,比如FileVersion里面有出品公司,版本號等等.
class Program
{
static void Main(string[] args)
{
Process[] pros = Process.GetProcesses();
foreach(Process pro in pros)
{
// Console.ReadKey();
if (pro.MainWindowTitle.ToString().IndexOf("360")>=0)
{
//殺掉他
}
}
}
}
ReadProcessMemory
再给你提供个思路:
计算进程文件的MD5值,因为MD5值不会应为修改文件名而改变