Java 以编程方式关闭Windows中另一进程打开的txt文件

Java 以编程方式关闭Windows中另一进程打开的txt文件,java,python,c,vba,winapi,Java,Python,C,Vba,Winapi,我希望强制关闭由另一个进程打开的txt文件。寻找关于如何实现这一点的建议、想法以及相关注意事项 Python解决方案会很好,但是其他编程语言也可以。我可以列出该进程,以及该进程打开了多少文件,但在如何关闭该文件方面却为空 您可以尝试使用Python按名称终止进程: 导入系统、回溯、操作系统 def py_kill(进程名称): 尝试: kill=os.system('tskill'+进程名称) 除例外情况外,e: 杀死=0 还击 你可以这样称呼它: py\u kill(“程序名称”) 使用

我希望强制关闭由另一个进程打开的txt文件。寻找关于如何实现这一点的建议、想法以及相关注意事项


Python解决方案会很好,但是其他编程语言也可以。我可以列出该进程,以及该进程打开了多少文件,但在如何关闭该文件方面却为空

您可以尝试使用Python按名称终止进程:


导入系统、回溯、操作系统
def py_kill(进程名称):
尝试:
kill=os.system('tskill'+进程名称)
除例外情况外,e:
杀死=0
还击
你可以这样称呼它:

py\u kill(“程序名称”)
使用C#通过PID杀死过程:


使用制度;
使用系统诊断;
使用System.Text.RegularExpressions;
命名空间killprocess
{
班级计划
{
静态void Main(字符串[]参数)
{
如果(参数长度!=1)
{
WriteLine(“需要参数:要终止的进程ID”);
返回;
}
正则表达式正则表达式=新正则表达式(“^[0-9]+$”;
bool bb=regex.IsMatch(args[0]);
if(!bb)
{
WriteLine(“进程Id应该是前向整数”);
返回;
}
intpid=Convert.ToInt32(args[0]);
尝试
{
nbsp;Process process2Kill=Process.GetProcessById(pid);
process2Kill.Kill();
WriteLine(String.Format(“ID为{0}的进程已终止”,pid));
}捕获(例外情况除外)
{
控制台写入线(例如消息);
;}
}
}
}

如果要在不终止其他进程的情况下执行此操作,需要使用
NtQueryInformationProcess
获取进程打开的
句柄列表。您还可以使用
NtQuerySystemInformation
获取已打开的
句柄的全局列表。然后只需使用
NtDuplicateObject关闭
句柄


请参阅:

取决于流程。这是什么?如果我有多个文件由多个不同的进程打开,所有文件都由同一个可执行文件支持怎么办?我不明白为什么投反对票,他要求关闭一个进程打开的文件文本,这些代码可以完成任务。您的escenario是合理的,在这种情况下,我们可以停止进程树。但这样做后,目标进程可能会失败,因为它仍然使用关闭的句柄(或创建具有相同值的新句柄,这可能更糟)。这是唯一的方法。如果Windows本身关闭句柄,进程也会得到
无效的句柄\u值
错误。是的,这可能是唯一的方法。但这并不意味着这样做是安全的。似乎这是唯一的办法,除非有什么我还不知道的。