以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  怎么实现删除目录之前 关闭所有进程  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=159809)

--  作者:李孝春
--  发布时间:2021/1/9 20:06:00
--  怎么实现删除目录之前 关闭所有进程
怎么实现删除目录之前 关闭所有进程

在窗口中放置一web浏览器  如果打开word或pdf或Excel等文件 【别的文件不会提示被打开】会将对应文件下载到reports目录下 然后文件显示在web浏览器中
 然后在项目退出后 想删除reports目录及所有文件  总会提示最后一个打开的文件已经打开 不能删除

下面代码{直接可以实现关闭对应进程名的进程 并删除目录,如果放入窗口关闭前或后事件 提示错误如上}
Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses()
For Each p As System.Diagnostics.Process In ps
    If p.MainWindowTitle.Contains(vars("进程名")) And p.MainWindowTitle<>"" Then
        MessageBox.Show(vars("进程名"))
        p.kill
    End If
Next

If FileSys.DirectoryExists(ProjectPath & "\\Reports") Then \'
    FileSys.DeleteDirectory(ProjectPath & "\\Reports",2,2)
End If

代码应该怎么完善或者该写在哪?
[此贴子已经被作者于2021/1/9 20:17:23编辑过]

--  作者:有点蓝
--  发布时间:2021/1/10 19:57:00
--  
项目退出放到BeforeCloseProject事件
--  作者:李孝春
--  发布时间:2021/1/11 15:31:00
--  回复:(有点蓝)项目退出放到BeforeCloseProject事件...
If vars("进程名")="" Then
    MessageBox.Show(vars("进程名"))
    If FileSys.DirectoryExists(ProjectPath & "\\Reports") Then \'
        FileSys.DeleteDirectory(ProjectPath & "\\Reports",2,2)
    End If
Else
    Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses()
    For Each p As System.Diagnostics.Process In ps
        If p.MainWindowTitle.Contains(vars("进程名")) And p.MainWindowTitle<>"" Then
            MessageBox.Show(vars("进程名"))
            p.kill
            If FileSys.DirectoryExists(ProjectPath & "\\Reports") Then \'
                FileSys.DeleteDirectory(ProjectPath & "\\Reports",2,2)
            End If
        End If
    Next
End If

变量进程名 是在选择某一行记录后,自动将文件名写进变量
然后根据变量的值来进行判断  如果变量为空    则没有打开任何文件 直接删除目录【可以删除】
 反之有文件打开了  那么就需要先杀死进程 然后再删除目录【没有实现删除】
当前代码放入项目退出后事件里  没有实现指定目录被删除 
麻烦老师帮我看看  是不是红色部分写法不对
[此贴子已经被作者于2021/1/11 15:35:09编辑过]

--  作者:有点蓝
--  发布时间:2021/1/11 15:36:00
--  
    If FileSys.DirectoryExists(ProjectPath & "\\Reports") Then \'
msgbox(1)有没有弹出
        FileSys.DeleteDirectory(ProjectPath & "\\Reports",2,2)
msgbox(2)有没有弹出
    End If

--  作者:李孝春
--  发布时间:2021/1/11 17:09:00
--  回复:(有点蓝)    If FileSys.Directory...
If vars("进程名")="" Then
    If FileSys.DirectoryExists(ProjectPath & "\\Reports") Then \'
        MessageBox.Show("1")
        FileSys.DeleteDirectory(ProjectPath & "\\Reports",2,2)
        MessageBox.Show("2")
    End If
Else
    MessageBox.Show("3")
    Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses()
    For Each p As System.Diagnostics.Process In ps
        output.Show("4")
        If p.MainWindowTitle.Contains(vars("进程名")) And p.MainWindowTitle<>"" Then
            MessageBox.Show("5")
            p.kill
            If FileSys.DirectoryExists(ProjectPath & "\\Reports") Then \'
                MessageBox.Show("6")
                FileSys.DeleteDirectory(ProjectPath & "\\Reports",2,2)
                MessageBox.Show("7")
            End If
        End If
    Next
End If

上述1234均可弹出  567不弹出  但是如果命令窗口直接运行红色部分  又可以实现删除效果   就是在项目关闭中不能实现

--  作者:有点蓝
--  发布时间:2021/1/11 17:18:00
--  
说明进程名称不正确
        output.Show(vars("进程名"))
    For Each p As System.Diagnostics.Process In ps
        output.Show(p.MainWindowTitle) 查看所有的名称是否有包含变量的名称
        If p.MainWindowTitle.Contains(vars("进程名")) And p.MainWindowTitle<>"" Then
            MessageBox.Show("5")

--  作者:李孝春
--  发布时间:2021/1/11 17:26:00
--  回复:(有点蓝)说明进程名称不正确    &n...
变量进程名 是在选择某一行记录后,自动将文件名写进变量   这个地方我没有指定进程名哦   经过多次测试 只有在pdf  word Excel 等文件存在打开的时候  才会导致项目关闭时 提示进程名对应的文件当前被打开状态   那这里我是不是还需要去指定对应的软件进程名  而不是直接根据进程的标题来判断呢?
--  作者:有点蓝
--  发布时间:2021/1/11 17:38:00
--  
先判断进程名再判断标题
--  作者:李孝春
--  发布时间:2021/1/15 13:36:00
--  回复:(有点蓝)先判断进程名再判断标题
If vars("文件名")="" Then
    If FileSys.DirectoryExists(ProjectPath & "\\Reports") Then \'
        MessageBox.Show("1")
        FileSys.DeleteDirectory(ProjectPath & "\\Reports",2,2)
        MessageBox.Show("2")
    End If
Else
    MessageBox.Show("3")
    Dim ps As  System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses()
    For Each p As System.Diagnostics.Process In ps
        output.Show("4")
        \'MessageBox.Show(vars("文件名"))
        If ("wps" = p.ProcessName) Then  \'安装有wps后打开的各类文件进程
        Else If ("WINWORD" = p.ProcessName) Then
        Else If ("WINEXCEL" = p.ProcessName) Then
        Else If ("POWERPNT" = p.ProcessName) Then
        Else If  ("AcroRd32" = p.ProcessName) Then \'安装有pdf后打开的文件进程
            If p.MainWindowTitle.Contains(vars("文件名")) Then
                MessageBox.Show("5")
                p.kill
                If FileSys.DirectoryExists(ProjectPath & "\\Reports") Then \'
                    MessageBox.Show("6")
                    FileSys.DeleteDirectory(ProjectPath & "\\Reports",2,2)
                    MessageBox.Show("7")
                End If
            End If
        End If
    Next
End If

项目关闭事件代码
红色部分直接写在事件代码如法删除指定目录
但是直接在命令窗口可以删除指定目录  求解

--  作者:有点蓝
--  发布时间:2021/1/15 13:43:00
--  
For Each p As System.Diagnostics.Process In ps
        output.Show("4")
        \'MessageBox.Show(vars("文件名"))
select case p.ProcessName
case "wps","WINWORD",....
    If p.MainWindowTitle.Contains(vars("文件名")) Then
                MessageBox.Show("5")
                p.kill
                If FileSys.DirectoryExists(ProjectPath & "\\Reports") Then \'
                    MessageBox.Show("6")
                    FileSys.DeleteDirectory(ProjectPath & "\\Reports",2,2)
                    MessageBox.Show("7")
                End If
            End If
end select
    Next
End If