Foxtable(狐表)用户栏目专家坐堂 → 怎么实现删除目录之前 关闭所有进程


  共有2921人关注过本帖树形打印复制链接

主题:怎么实现删除目录之前 关闭所有进程

帅哥哟,离线,有人找我吗?
李孝春
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
怎么实现删除目录之前 关闭所有进程  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/10 19:57:00 [只看该作者]

项目退出放到BeforeCloseProject事件

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)项目退出放到BeforeCloseProject事件...  发帖心情 Post By:2021/1/11 15:31:00 [只看该作者]

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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/11 15:36:00 [只看该作者]

    If FileSys.DirectoryExists(ProjectPath & "\Reports") Then '
msgbox(1)有没有弹出
        FileSys.DeleteDirectory(ProjectPath & "\Reports",2,2)
msgbox(2)有没有弹出
    End If

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)    If FileSys.Directory...  发帖心情 Post By:2021/1/11 17:09: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")
        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不弹出  但是如果命令窗口直接运行红色部分  又可以实现删除效果   就是在项目关闭中不能实现

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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")

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)说明进程名称不正确    &n...  发帖心情 Post By:2021/1/11 17:26:00 [只看该作者]

变量进程名 是在选择某一行记录后,自动将文件名写进变量   这个地方我没有指定进程名哦   经过多次测试 只有在pdf  word Excel 等文件存在打开的时候  才会导致项目关闭时 提示进程名对应的文件当前被打开状态   那这里我是不是还需要去指定对应的软件进程名  而不是直接根据进程的标题来判断呢?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/11 17:38:00 [只看该作者]

先判断进程名再判断标题

 回到顶部
帅哥哟,离线,有人找我吗?
李孝春
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)先判断进程名再判断标题  发帖心情 Post By: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

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
总数 15 1 2 下一页