从C#开始,打开一个任意应用程序

相关问题[stackoverflow] 在这里 。

我正在努力做到这一点,但我想更进一步。 我想使用文件类型的默认编辑器打开任意文件。 从那时起,我希望允许我的用户像往常一样与文件进行交互,或者继续在我的应用程序中工作。 扩展名是用户完成编辑后发生的事情。 有没有办法可以从外部应用程序捕获一个close(并且理想的保存)事件,并将其用作触发器来执行其他操作? 就我的目的而言,跟踪外部应用程序的关闭就行了。

我可以在具体情况下这样做。 例如,我可以从我的应用程序中打开Word实例并跟踪我的应用程序感兴趣的事件。 但是,我想将我的应用程序与Word分离。我希望允许我的用户使用他们选择的任何文档编辑器,然后在后台管理正在编辑的文件的存储。

您可以采用与引用问题类似的方式执行此操作,但语法略有不同:

System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo = new System.Diagnostics.ProcessStartInfo("C:\...\...\myfile.html"); process.Start(); process.WaitForExit(); // this line is the key difference 

WaitForExit()调用将阻塞,直到另一个应用程序关闭。 您可以在单独的线程中使用此代码,以便用户可以在此期间继续使用您的应用程序。

使用FileSystemWatcher类来监视对文件的更改。

编辑 :您还可以处理Process对象的Exited事件以找出退出程序的时间。 但请注意,这不会告诉您用户关闭您的文件但不会退出该过程。 (这在Word中尤为可能)。

要侦听文件更改,可以使用FileSystemWatcher并侦听上次修改日期的更改。

您还可以监视进程,并在进程关闭时检查文件。

我刚刚在网上找到了这个有用的提示。 这似乎是你在寻找的。 这篇文章(链接已破坏)有一些关于C#编程的更详细和有用的,有用的技巧。

 string filename = "instruction.txt"; System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@filename); System.Diagnostics.Process rfp = new System.Diagnostics.Process(); rfp = System.Diagnostics.Process.Start(psi); rfp.WaitForExit(2000); if (rfp.HasExited) { System.IO.File.Delete(filename); } //execute other code after the program has closed MessageBox.ShowDialog("The program is done.");