![](/img/trans.png)
[英].net Process.Start Method not Launching Excel File in Excel 2013 only when launched from whithin excel com addin
[英]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.