在VB.NET中检查使用process.start()启动的文件中的更改
我正在开发一个基于vbnet / c#.NET的应用程序,它打开具有不同应用程序(excel,word等)的文件。
使用Dim app As Process = Process.Start(ProcessProperties)
启动Dim app As Process = Process.Start(ProcessProperties)
现在,当我必须终止进程时,我使用app.Kill()
但我需要检查文档是否已被修改,然后才能app.Kill()
它。
我该怎么处理? 如果可能,我如何启动应用程序本机提示进行保存?
谢谢
对于办公应用程序,使用Office Interop程序集,而不是Process.Start
来启动和控制它们。 这是Excel的示例代码(在VB.NET中)。 您应该将Microsoft.Office.Interop.Excel.dll
添加到项目引用中,以使其正常工作。
oExcel = New Microsof.Office.Interop.Excel.Application oBook = oExcel.Workbooks.Open(filepath) 'Do your stuff oBook.Close 'This will trigger the application native prompt if the document was modified oExcel.Quit()
对于其他程序,它很大程度上取决于程序
您可以通过调用Process.CloseMainWindow
而不是Process.Kill
来实现接近您所需的行为。
CloseMainWindow
的行为与使用系统菜单关闭应用程序主窗口的用户的行为相同。 因此,通过关闭主窗口退出进程的请求不会强制应用程序立即退出。如果您致电
Kill
则由流程编辑的数据或分配给流程的资源可能会丢失。Kill
会导致exception进程终止,并且只应在必要时使用。CloseMainWindow
可以有序地终止进程并关闭所有窗口,因此最好是带有接口的应用程序。
对于未保存更改的Office应用程序, CloseMainWindow
将启动“保存”对话框。 您需要处理用户按“取消”的情况,因为这可能导致WaitForExit
调用无限期地阻塞。
例如:
// Launch Word application. Process wordProcess = Process.Start(@"C:\Program Files (x86)\Microsoft Office\Office12\winword.exe"); // Give user some time to type in text. Thread.Sleep(TimeSpan.FromSeconds(20)); // Request Word to close. wordProcess.CloseMainWindow(); // Wait until user saves or discards changes. // May block indefinitely if user cancels. wordProcess.WaitForExit();
这个问题有不同的方法。 您可以计算某种初始校验和,并通过重做校验和并与原始校验进行比较来查看您的文档是否有任何更改。
从您的问题来看,这部分不是很清楚,如果文档被保存,可能您可以查看文件的date_modified值以查看是否有任何修改。