【问题标题】:Process.WaitForExit(n) won't wait immediately after Process.Start()Process.WaitForExit(n) 不会在 Process.Start() 之后立即等待
【发布时间】:2021-02-22 19:14:10
【问题描述】:

代码:

                                    using p = new Process();
                                    p.StartInfo.UseShellExecute = true;
                                    p.StartInfo.Verb = "printto";
                                    p.StartInfo.FileName = fileName;
                                    p.StartInfo.Arguments = printerName;
                                    p.Start();
                                    p.WaitForExit(20000);

有时会抛出:

“System.InvalidOperationException:没有进程与此对象关联。”来自.WaitForExit(20000) 行。

我们从事件日志中捕获了这一点,所以它确实像这样发生了。我很困惑我们怎么会在p.Start() 之后立即处于“无进程”状态。我设法使无法运行的进程无法运行,但通过了p.Start() 预检检查,但它们总是能够创建一个句柄,因此.WaitForExit() 总是通过报告它已经退出来工作。

我很困惑。 ShellExecuteEx 调用某种 DDE 函数或其他不能识别进程的函数是合理的,但 Process API 似乎不支持该操作。调用代码也根本没有打开窗口,那么DDE源是什么?

我实际上不需要在这里等;我只需要检测它是否是一些 DDE 或其他废话,否则我可以通过少量睡眠来做我需要的事情。

有一个近乎骗局的结果是直接调用 iexplore 进程的答案,我不能使用。

【问题讨论】:

    标签: system.diagnostics .net-framework-4.8 shellexecuteex


    【解决方案1】:

    您需要确保 FilePath 指向可打印的文档(如 pdf doc 或 rtf)。并将打印机名称放入 Phrases p.StartInfo.Arguments = "\"" + printerName + "\""; 中,否则打印机会报错。

    【讨论】:

    • 你误会了。我可以右键单击打印文件就好了。我很确定当打印动词处理程序没有启动新进程时会发生问题。
    • 这很奇怪,当您运行该进程时,它通常应该可以正常启动,我自己尝试过,它可以工作。
    猜你喜欢
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多