知道一个文件的路径通过点击启动按钮运行了这个文件,怎么才能再点击另一个关闭按钮,结束他的进程呢,也就是怎么去获取到他的进程名字从而结束进程来关掉它!!!
下面这个代码是知道进程名字的可以这样写,我想知道不知道进程名的时候要怎么实现
string appName = Process.GetCurrentProcess().MainModule.FileName;
Process[] pcs = Process.GetProcesses();
foreach (Process p in pcs)
{
if (p.ProcessName == “notepad”) //找到名称是notepad的进程
{
p.Kill();//结束进程
}
}
有没有大神来指导一下啊
Process[] pcs = Process.GetProcesses();
foreach (Process p in pcs)
{
if (p.MainModule.FileName == “你的文件路径”)
{
p.Kill();//结束进程
}
}
文件的路径不能写死的,我获取到的路径是这个
if (openurl.Equals(""))
{ return; }
Process ps = new Process();
//指定路径的程序
ps.StartInfo.FileName = @openurl;
下面这句要怎么改,我用openurl并不行
if (p.MainModule.FileName == “你的文件路径”)
{
p.Kill();//结束进程
}
@C#求学路: 可能你的openurl使用的是相对路径,这样写
if (p.MainModule.FileName == System.IO.Path.GetFullPath(openurl))
{
p.Kill();//结束进程
}
//打开程序
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);
}
这是我通过路径打开程序的代码,我要结束进程的怎么改
@刘宏玺:
“System.ComponentModel.Win32Exception”类型的未经处理的异常在 System.dll 中发生
其他信息: 32 位进程无法访问 64 位进程的模块。
改了之后就报了这个错误,我之前也是报这个错,可是在网上找不到明确的怎么处理这个错误
@C#求学路: 在你的项目右键-》属性-》生成-》目标平台-》Any CPU
@刘宏玺: 目标平台下是Any CPU啊
@C#求学路: 那你换成64
@刘宏玺:
“System.ComponentModel.Win32Exception”类型的未经处理的异常在 System.dll 中发生
其他信息: 拒绝访问。
这个什么意思啊
@C#求学路: 那就换成32,挨个试试
@刘宏玺: 选项里没有32,只有Any CPU X86 X64 ,只在下面有一个首选32位 还有允许不安全代码和优化代码,全都试过来还是不行 ,不是报32 位进程无法访问 64 位进程的模块。这个错,就是拒绝访问
@C#求学路: 百度一下吧,应该是很通用的问题,下班了
@刘宏玺: 好吧,谢谢你
@C#求学路: 请问这个问题你解决了吗?32位进程中取得进程的完整路径。
可以通过路径判断进行结束
我知道可以通过路径判断,现在的问题是,路径我是这样获取的
if (openurl.Equals(""))
{ return; }
Process ps = new Process();
//指定路径的程序
ps.StartInfo.FileName = @openurl;
我要怎么关掉我这个打开的指定路径的程序
下面这个代码是知道进程名字的可以这样写,我想知道不知道进程名的时候要怎么实现
string appName = Process.GetCurrentProcess().MainModule.FileName;
Process[] pcs = Process.GetProcesses();
foreach (Process p in pcs)
{
if (p.ProcessName == “notepad”) //找到名称是notepad的进程
{
p.Kill();//结束进程
}
}
通过路劲启动 是不是有一个XX.EXE 对吧
然后 这个名字 其实就是这个名字 回答完毕
不是这样的,比如我打开了一个文本文件,我给它命名:日志文档.txt,但是在进程中我看了一下名字是notepad
我路径也是获取到的,不是直接写的相对路径
说错了,不是直接写的绝对路径
@C#求学路: 对 系统自带的程序都有特定的 进程名子 但是如果不是的话那么就是那个
@skin33: 还是不太明白- -#
@C#求学路: TT 好吧 打个比方 就是其实你打开一个TXT 在系统里面叫 notepad.exe
因为TXT 不是一个可执行的EXE 文件 你明白了嘛
@skin33: 我明白了,那我要怎么获取到他的进程名呢
if(p.MainModule.FileName == System.IO.Path.GetFullPath(openurl))
这段代码 p.MainModule.FileName 我用断点看了一下无论我的openurl传进去的是什么他的值始终是MSBuild.exe,这里是不是用错了
@C#求学路: 你获取启动路径后 不是有个XX.EXE嘛 XX 就是名字啊
然后Process[] pcs = Process.GetProcesses(); 找到一样的 就好啦
记得名字都转成大写 然后 如果有系统托盘图标的话 记得回收资源
@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();//结束进程
}
}
}
@C#求学路: 主要我告诉你思路 具体代码我就不帮你写了 你的openurl 应该是C://XX.EXE 这种吧