如果在默认应用程序(vb.net)中打开它,请关闭它

时间:2013-12-26 15:48:35

标签: vb.net process kill

我需要在覆盖现有文件后使用vb.net以编程方式打开文本文件。但是,如果文件已打开,则仍会显示该文件的旧版本 如果当前在默认文本查看应用程序中打开了.txt文件,如何关闭它?

我不能只使用:

    Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("notepad")

    For Each p As Process In pProcess
        p.Kill()
    Next

因为这会杀死在记事本中打开的每个文件。我也不想将记事本硬编码为应用程序,因为这可能不是在客户端计算机上打开.txt文件的默认文件。

2 个答案:

答案 0 :(得分:1)

阅读评论后,我假设您要杀死已打开给定文本文件的notepad.exe进程。

Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("notepad")

For Each p As Process In pProcess
    If p.MainWindowTitle.Contains(filename) Then
        p.Kill()
    End If
Next

此代码可能适用于您

答案 1 :(得分:0)

你所追求的将无法真正发挥作用。

这是因为您在文本文件之后,默认设置为在记事本中打开。并且,记事本不保留文件的句柄。在记事本中打开文件时,文件的整个内容将作为文本加载,文件句柄将关闭。 (尝试在记事本中打开文件,然后将其删除。)

但是,如果您使用的是二进制文件(例如Word),那么应用程序将使用临时文件,因此您可以使用标记FileShare.None

进行检查

System.IO.File.Open(sFile, FileMode.Open, FileAccess.Read, FileShare.None)

try-catch中使用此功能确认文件是否正在使用中。