InvalidOperationException - 如果进程是作为文件类型的默认关联程序启动的

时间:2012-12-27 18:00:19

标签: c# process invalidoperationexception

情况:

  1. 依靠默认的关联处理程序,我为各种文件类型(图片,Word文档等)生成进程。这意味着我只将特定文件名指定为StartInfo.FileName,并且在该文件名之前没有实际可执行文件。同时我指定StartInfo.UseShellExecute = true。这样,将启动具有该文件类型的关联软件。
  2. 我的目标是在该流程退出时收到通知。

  3. Process process = new Process();
    try
    {
        process.StartInfo.UseShellExecute = true;
        process.StartInfo.FileName = pFullPath;
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.RedirectStandardError = true;
        bool notReused = process.Start();
    }
    catch (Win32Exception ex)
    

    变体:

    • 进程的静态Start方法确实返回一个进程,但是我为我的方案返回了null / empty对象。这就是为什么我显式地实例化Process类,为其StartInfo属性设置参数,然后在最后调用非静态Start(),所以我拥有该Process对象实例。
    • 如果我说StartInfo.UseShellExecute = false,我会收到异常,因为我没有指定可执行文件名。看来这是用文件类型调用相关程序的方法。
    • 非静态Process.Start具有布尔返回值,它表示系统重用了Process。我不想那样,但我不知道如何避免它。
    • 我尝试设置StartInfo的Redirect * booleans,但是再次抛出InvalidOperationException,这符合文档。

    如果我有一个“好”的Process对象,我可以挂起Exited处理程序并将EnableRaisingEvents设置为true。我对这样的PITA是多么惊讶和悲伤。

1 个答案:

答案 0 :(得分:2)

这是完全不可能的 启动文件并不能保证创建一个进程。

Raymond Chen有far more detail