以文本方式查看主题 - 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 |