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

时间:2009-09-14 00:01:16

标签: c# com ms-word ole ole-automation

相关问题[stackoverflow] here

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

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

4 个答案:

答案 0 :(得分:3)

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

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()调用将阻塞,直到其他应用程序关闭。您可以在单独的线程中使用此代码,以便用户可以在此期间继续使用您的应用程序。

答案 1 :(得分:2)

使用FileSystemWatcher class监视文件的更改。

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

答案 2 :(得分:0)

要收听文件更改,您可以使用FileSystemWatcher并在上次修改日期收听更改。

您还可以监控流程,并在流程结束时检查文件。

答案 3 :(得分:0)

我刚刚在线发现了这个有用的提示。这似乎是你在寻找的东西。 This article (link broken)有一些关于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.");