0

我正在开发一个基于 vbnet/c#.NET 的应用程序,它可以使用不同的应用程序(excel、word 等)打开文件。

该应用程序使用启动Dim app As Process = Process.Start(ProcessProperties)

现在,当我必须终止我使用的进程app.Kill()但我需要在杀死它之前检查文档是否已被修改。

我该如何处理?如果可能的话,如何启动应用程序本机提示以进行保存?

谢谢

4

3 回答 3

4

对于办公应用程序,请使用Office 互操作程序集,而不是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()

对于其他程序,它很大程度上取决于一个程序

于 2012-05-22T18:05:24.733 回答
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();
于 2012-05-22T18:09:29.640 回答
0

这个问题有不同的方法。您可以计算某种初始校验和,并通过重做校验和并与原始校验和进行比较来查看您的文档是否有任何更改。

这部分从您的问题中不是很清楚,如果文档被保存,您可能可以查看文件的 date_modified 值以查看是否有任何修改。

于 2012-05-22T18:09:11.130 回答