我正在开发一个基于vbnet / c#.NET的应用程序,它可以打开具有不同应用程序(excel,word等)的文件。
使用Dim app As Process = Process.Start(ProcessProperties)
现在,当我必须终止该过程时,我使用app.Kill()
,但我需要检查文档是否已被修改,然后才能删除它。
我该怎么处理?如果可能,我如何启动应用程序原生提示进行保存?
由于
答案 0 :(得分:4)
对于办公室应用程序,请使用Office Interop Assemblies,而不是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()
对于其他程序,它很大程度上取决于程序
答案 1 :(得分:2)
通过调用Process.CloseMainWindow
而不是Process.Kill
,您可以达到所需的行为。
CloseMainWindow
的行为与使用系统菜单关闭应用程序主窗口的用户的行为相同。因此,通过关闭主窗口退出进程的请求不会强制应用程序立即退出。如果您致电
Kill
,则流程编辑的数据或分配给流程的资源可能会丢失。Kill
导致异常进程终止,应仅在必要时使用。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();
答案 2 :(得分:0)
这个问题有不同的方法。您可以计算某种初始校验和,并通过重做校验和并与原始校验进行比较来查看您的文档是否有任何更改。
这一部分从您的问题中不是很清楚,如果文档被保存,可能您可以查看文件的date_modified值以查看是否有任何修改。