繁体   English   中英

如何在C#中启动System.Diagnostics.Process?

[英]How to start a System.Diagnostics.Process in C#?

当我运行此代码时:

        Process printjob = new Process();
        printjob.StartInfo.FileName = "file.html";
        printjob.StartInfo.UseShellExecute = true;
        printjob.StartInfo.Verb = "print";
        printjob.StartInfo.CreateNoWindow = true;
        printjob.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        printjob.Start();

抛出此异常:
“没有应用程序与此操作指定的文件关联”
我该怎么办?

在您的计算机上,没有应用程序与文件类型“ .html”相关联。 如果要尝试在Web浏览器中查看它,请考虑启动iexplore.exe (例如,启动Internet Explorer),然后将file.html作为参数包括在内

例如:

Process.Start("IExplore.exe", @"C:\myPath\file.html");

以下代码段应该可以工作,但是确实存在可能破坏交易的问题(请继续阅读以获取解释):

static void Main(string[] args)
{
    string pathToFile = "...";
    var processStartInfo = new ProcessStartInfo(); 
    processStartInfo.Verb = "print";
    processStartInfo.FileName = pathToFile;     

    var process = Process.Start(processStartInfo);
    process.WaitForExit();
}

上面的代码唯一的问题是它将显示打印对话框。 我找不到抑制它的方法,这似乎是打印HTML文件所特有的问题(或功能)。

如果您可以容忍打印对话框出现一秒钟左右,这是一个丑陋的解决方法,那就是模拟通过代码将“ enter”键发送到打印对话框。 最简单的方法是使用System.Windows.Forms.SendKeys类,尤其是SendWait方法。

因此,修改后的代码段将如下所示:

static void Main(string[] args)
{
    string pathToFile = "...";
    var processStartInfo = new ProcessStartInfo(); 
    processStartInfo.Verb = "print";
    processStartInfo.FileName = pathToFile;     

    var process = Process.Start(processStartInfo);

    System.Threading.Thread.Sleep(1000);
    System.Windows.Forms.SendKeys.SendWait("{ENTER}");

    process.WaitForExit();
}

必须调用“ Sleep ,以确保在发送按键之前已完全加载了打印对话框并准备接收用户输入。

HTH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM