【问题标题】:From C#, open an arbitrary application从 C#,打开任意应用程序
【发布时间】:2010-11-27 23:55:39
【问题描述】:

相关问题 [stackoverflow] here.

我正在尝试执行上述操作,但我想更进一步。我想使用文件类型的默认编辑器打开任意文件。从那时起,我想让我的用户像往常一样与文件交互,或者继续在我的应用程序中工作。扩展是用户完成编辑后发生的事情。有没有办法可以从外部应用程序捕获关闭(最好是保存)事件并将其用作执行其他操作的触发器?就我而言,跟踪外部应用程序的关闭就可以了。

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

【问题讨论】:

  • 您应该更改标题以反映实际问题。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    编辑:你也可以处理Process对象的Exited事件来查明程序何时退出。但是,请注意,这不会告诉您用户关闭了您的文件但没有退出该过程。 (这在 Word 中尤为常见)。

    【讨论】:

    • +1 处理 Exited 事件比使用 WaitForExit 更好。
    【解决方案3】:

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

    您还可以监控进程并在进程关闭时检查然后文件。

    【讨论】:

      【解决方案4】:

      我刚刚在网上发现了这个有用的提示。这似乎是您正在寻找的东西。 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.");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多