首页 新闻 会员 周边 捐助

C#中怎么通过路径获取到文件的进程名并且强制关闭进程!!!

0
悬赏园豆:10 [已关闭问题] 关闭于 2016-04-29 13:44

知道一个文件的路径通过点击启动按钮运行了这个文件,怎么才能再点击另一个关闭按钮,结束他的进程呢,也就是怎么去获取到他的进程名字从而结束进程来关掉它!!!

 

下面这个代码是知道进程名字的可以这样写,我想知道不知道进程名的时候要怎么实现

string appName = Process.GetCurrentProcess().MainModule.FileName;
Process[] pcs = Process.GetProcesses();
foreach (Process p in pcs)
{
if (p.ProcessName == “notepad”) //找到名称是notepad的进程
{
p.Kill();//结束进程

}
}

问题补充:

有没有大神来指导一下啊

C#求学路的主页 C#求学路 | 初学一级 | 园豆:83
提问于:2016-04-28 16:22
< >
分享
所有回答(3)
0

Process[] pcs = Process.GetProcesses();
foreach (Process p in pcs)
{
if (p.MainModule.FileName == “你的文件路径”)
{
p.Kill();//结束进程

}
}

刘宏玺 | 园豆:14020 (专家六级) | 2016-04-28 16:33

文件的路径不能写死的,我获取到的路径是这个

if (openurl.Equals(""))
{ return; }
Process ps = new Process();
//指定路径的程序
ps.StartInfo.FileName = @openurl;

下面这句要怎么改,我用openurl并不行

if (p.MainModule.FileName == “你的文件路径”)
{
p.Kill();//结束进程

}

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 16:46

@C#求学路: 可能你的openurl使用的是相对路径,这样写

 

if (p.MainModule.FileName == System.IO.Path.GetFullPath(openurl))
{
p.Kill();//结束进程

}

支持(0) 反对(0) 刘宏玺 | 园豆:14020 (专家六级) | 2016-04-28 16:49

//打开程序
private void btnOneStart_Click_1(object sender, EventArgs e)
{

if (openurl.Equals(""))
{ return; }
Process ps = new Process();
//指定路径的程序
ps.StartInfo.FileName = @openurl;
if (openurl == "111111111111")
{
MessageBox.Show("该窗口中没有文件可以启动");
}
else
{
//启动程序
ps.Start();
}
//MessageBox.Show(ps.ProcessName);
}

这是我通过路径打开程序的代码,我要结束进程的怎么改

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 16:49

@刘宏玺: 

“System.ComponentModel.Win32Exception”类型的未经处理的异常在 System.dll 中发生

其他信息: 32 位进程无法访问 64 位进程的模块。

改了之后就报了这个错误,我之前也是报这个错,可是在网上找不到明确的怎么处理这个错误

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 16:51

@C#求学路: 在你的项目右键-》属性-》生成-》目标平台-》Any CPU

支持(0) 反对(0) 刘宏玺 | 园豆:14020 (专家六级) | 2016-04-28 16:53

@刘宏玺: 目标平台下是Any CPU啊

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 16:55

@C#求学路: 那你换成64

支持(0) 反对(0) 刘宏玺 | 园豆:14020 (专家六级) | 2016-04-28 16:55

@刘宏玺: 

“System.ComponentModel.Win32Exception”类型的未经处理的异常在 System.dll 中发生

其他信息: 拒绝访问。

这个什么意思啊

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 16:57

@C#求学路: 那就换成32,挨个试试

支持(0) 反对(0) 刘宏玺 | 园豆:14020 (专家六级) | 2016-04-28 16:58

@刘宏玺: 选项里没有32,只有Any CPU   X86   X64   ,只在下面有一个首选32位 还有允许不安全代码和优化代码,全都试过来还是不行 ,不是报32 位进程无法访问 64 位进程的模块。这个错,就是拒绝访问

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 17:02

@C#求学路: 百度一下吧,应该是很通用的问题,下班了

支持(0) 反对(0) 刘宏玺 | 园豆:14020 (专家六级) | 2016-04-28 17:04

@刘宏玺: 好吧,谢谢你

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 17:05

@C#求学路: 请问这个问题你解决了吗?32位进程中取得进程的完整路径。

支持(1) 反对(0) swtool | 园豆:200 (初学一级) | 2019-08-02 15:41
0

可以通过路径判断进行结束

waiter | 园豆:1000 (小虾三级) | 2016-04-28 16:34

我知道可以通过路径判断,现在的问题是,路径我是这样获取的

if (openurl.Equals(""))
{ return; }
Process ps = new Process();
//指定路径的程序
ps.StartInfo.FileName = @openurl;

 

我要怎么关掉我这个打开的指定路径的程序

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 16:47
0

下面这个代码是知道进程名字的可以这样写,我想知道不知道进程名的时候要怎么实现

string appName = Process.GetCurrentProcess().MainModule.FileName;
Process[] pcs = Process.GetProcesses();
foreach (Process p in pcs)
{
if (p.ProcessName == “notepad”) //找到名称是notepad的进程
{
p.Kill();//结束进程

}
}

通过路劲启动 是不是有一个XX.EXE 对吧

然后 这个名字 其实就是这个名字  回答完毕

skin33 | 园豆:110 (初学一级) | 2016-04-28 17:28

不是这样的,比如我打开了一个文本文件,我给它命名:日志文档.txt,但是在进程中我看了一下名字是notepad

我路径也是获取到的,不是直接写的相对路径

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 17:32

说错了,不是直接写的绝对路径

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 17:32

@C#求学路: 对 系统自带的程序都有特定的 进程名子  但是如果不是的话那么就是那个   

支持(0) 反对(0) skin33 | 园豆:110 (初学一级) | 2016-04-28 17:33

@skin33: 还是不太明白- -#

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 18:01

@C#求学路: TT 好吧  打个比方 就是其实你打开一个TXT 在系统里面叫  notepad.exe 

因为TXT 不是一个可执行的EXE 文件 你明白了嘛

支持(0) 反对(0) skin33 | 园豆:110 (初学一级) | 2016-04-28 18:05

@skin33: 我明白了,那我要怎么获取到他的进程名呢

if(p.MainModule.FileName == System.IO.Path.GetFullPath(openurl))

这段代码 p.MainModule.FileName 我用断点看了一下无论我的openurl传进去的是什么他的值始终是MSBuild.exe,这里是不是用错了

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-28 18:10

@C#求学路: 你获取启动路径后 不是有个XX.EXE嘛  XX 就是名字啊

 

然后Process[] pcs = Process.GetProcesses();  找到一样的 就好啦

记得名字都转成大写  然后 如果有系统托盘图标的话 记得回收资源

支持(0) 反对(0) skin33 | 园豆:110 (初学一级) | 2016-04-29 09:42

@skin33: 这是我的代码,要怎么改啊

private void btnOneClose_Click(object sender, EventArgs e)
{

string appName = Process.GetCurrentProcess().MainModule.FileName;
Process[] pcs = Process.GetProcesses();
foreach (Process p in pcs)
{

if (p.MainModule.FileName.Equals(System.IO.Path.GetFullPath(openurl)))
{
p.Kill();//结束进程
}
}
}

支持(0) 反对(0) C#求学路 | 园豆:83 (初学一级) | 2016-04-29 09:51

@C#求学路: 主要我告诉你思路 具体代码我就不帮你写了  你的openurl 应该是C://XX.EXE 这种吧

支持(0) 反对(0) skin33 | 园豆:110 (初学一级) | 2016-04-29 11:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册