繁体   English   中英

在VB.NET中检查使用process.start()启动的文件中的更改

[英]In VB.NET check for changes in a file launched with process.start()

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

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

现在,当我不得不终止进程时,我使用app.Kill()但是我需要在杀死文件之前检查该文件是否已被修改。

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

谢谢

对于Office应用程序,请使用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会导致异常终止进程,应仅在必要时使用。 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值以查看是否进行了任何修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM