我不知道我在这里做错了什么,但是当我没有运行时我正在尝试删除二进制文件,但如果它正在运行,则会显示一个消息框,告诉用户在删除之前关闭该程序。当我尝试这样做时,它会忽略消息框并尝试在文件运行时删除该文件,显然你不能这样做,所以它返回到这个:
System.UnauthorizedAccessException:'拒绝访问路径'C:\ cmctemp \ lcpol \ lcweb.exe'。
不确定为什么它没有显示消息框。
private void button5_Click(object sender, EventArgs e)
{
Process[] pname = Process.GetProcessesByName("lcweb.exe");
if (pname.Length == 0)
if (File.Exists(@"C:\cmctemp\lcpol\lcweb.exe"))
File.Delete(@"C:\cmctemp\lcpol\lcweb.exe");
else
MessageBox.Show("Please close the program before deleting!", "Information");
}
答案 0 :(得分:5)
尝试这样做:
private void button5_Click(object sender, EventArgs e)
{
Process[] pname = Process.GetProcessesByName("lcweb");
if (pname.Length == 0 && File.Exists(@"C:\cmctemp\lcpol\lcweb.exe"))
File.Delete(@"C:\cmctemp\lcpol\lcweb.exe");
else
MessageBox.Show("Please close the program before deleting!", "Information");
}
我们删除的第一个更改" .exe"来自 GetProcessByName ,第二个我只是调整 if语句。
我希望它可以帮到你。
答案 1 :(得分:3)
您遇到的问题是Process.GetProcessesByName
不是有效的进程名称。来自.exe
https://msdn.microsoft.com/en-us/library/z3w4xdc9(v=vs.110).aspx的文档:
processName :流程的友好名称。
所以你需要这个过程的友好名称。这可能是没有Process.GetProcessesByName("lcweb")
后缀的可执行文件:
Process.GetProcesses()
.Where(p => p.MainModule.ModuleName == "lcweb.exe")
如果您确实需要按可执行文件的名称查找进程,则需要执行以下操作:
before
但是,您需要确保您的应用是64位,否则您将获得例外。
答案 2 :(得分:2)
首先,如果文件存在,您不必检查:
https://msdn.microsoft.com/en-us/library/system.io.file.delete(v=vs.110).aspx
如果要删除的文件不存在,则不会抛出任何异常。
无法删除文件的原因很多,这就是为什么我建议
尝试<a>
<b1>
<c>
<d>
<e>1</e>
</d>
</c>
</b1>
<b2>1</b2>
<b1>
<c>
<d />
</c>
</b1>
<b2>2</b2>
<b1>
<c>
<d>
<e>3</e>
</d>
</c>
</b1>
<b2>3</b2>
</a>
,如果<a>
<b1>
<c>
<d>
<e>1</e>
</d>
</c>
</b1>
<b2>1</b2>
</b1>
<b2>2</b2>
<b1>
<c>
<d>
<e>3</e>
</d>
</c>
</b1>
<b2>3</b2>
</a>
询问用户
Delete
答案 3 :(得分:0)
您的代码需要2个修复程序,第一个:不执行嵌套if / else不使用括号
private void button5_Click(object sender, EventArgs e)
{
Process[] pname = Process.GetProcessesByName("lcweb");
if (pname.Length == 0)
{
if (File.Exists(@"C:\cmctemp\lcpol\lcweb.exe"))
File.Delete(@"C:\cmctemp\lcpol\lcweb.exe");
}
else
{
MessageBox.Show("Please close the program before deleting!", "Information");
}
}
您将else
与错误的if {
对于第二个修复,相应于DavidG的回答,Process.GetProcessesByName需要进程的友好名称,在您的情况下似乎是“lcweb”
答案 4 :(得分:-2)
添加括号以分隔if
:
private void button5_Click(object sender, EventArgs e)
{
Process[] pname = Process.GetProcessesByName("lcweb");
if (pname.Length == 0)
{
if (File.Exists(@"C:\cmctemp\lcpol\lcweb.exe"))
File.Delete(@"C:\cmctemp\lcpol\lcweb.exe");
}
else
{
MessageBox.Show("Please close the program before deleting!", "Information");
}
}