从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.");