【发布时间】:2011-09-17 13:16:02
【问题描述】:
我有一个备份应用程序,它会在备份之前关闭用户定义的正在运行的程序,以便在备份之前关闭和刷新打开的数据文件。备份完成后,它会重新启动列表中的程序。
使用 Caption 和 PostMessage(AppHandle,WM_CLOSE,0,0); 获取窗口句柄没有问题这适用于大多数应用程序,但不适用于在通知区域(系统托盘)中运行的应用程序
目前我正在使用 TerminateProcess( 它适用于那些通知区域应用程序,但它会使文件保持打开状态,因为 Windows 会绕过任何关闭指令并直接关闭这些应用程序。
我已经搜索了很长时间,但找不到更好的方法来关闭通知区域应用程序。有人可以帮忙吗?
谢谢
【问题讨论】:
-
TerminateProcess不会让文件保持打开状态。当拥有进程关闭时,所有打开的句柄都将关闭。此外,如果你想备份打开的文件,操作系统已经为此提供了一个 API:Shadow Copy。 -
@Rob:尝试备份打开的文件可能会导致您在文件处于不一致状态时拍摄快照。
-
@Gabe,不比意外关闭程序更糟糕......
-
@bdonlan:是的,这就是问题的重点。