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

如何在C#中启动System.Diagnostics.Process?,c#,html,process,printing,C#,Html,Process,Printing,当我运行此代码时: Process printjob = new Process(); printjob.StartInfo.FileName = "file.html"; printjob.StartInfo.UseShellExecute = true; printjob.StartInfo.Verb = "print"; printjob.StartInfo.CreateNoWindow = true;

当我运行此代码时:

        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浏览器中查看它,请考虑启动<强> iExplor.exe <强>(例如,启动Internet Explorer),然后将<强>文件.html 作为参数。

例如:

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

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

上面代码的唯一问题是它将显示“打印”对话框。我无法找到抑制它的方法,这似乎是打印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();
}
需要调用
睡眠
,以确保打印对话框已完全加载,并在发送按键之前准备好接收用户输入


HTH

从cmd.exe编写“print file.html”时会发生什么?(请确保您是以运行代码的同一用户的身份登录的)。它显示:“无法初始化设备PRN”似乎表明您没有安装正确的打印驱动程序。基本上,这是一个系统管理问题。修复打印机,按照我描述的方式测试该命令,当该命令起作用时,您的代码将起作用。我的打印机驱动程序已安装并可在其他应用程序中工作。你有解决这个问题的建议吗?没有。这显然是问题所在,所以你可以搜索你得到的错误信息,我刚才就这么做了,这导致了一些解决方案和麻烦解决过程,我会尝试。然而,你似乎对用这种方式帮助自己并不特别感兴趣,我也不想为你做你的工作。祝你好运。我想打印html文件。我该怎么做?使用哪种应用程序?它还存在问题。看来我必须设置一个程序来打印html文件。你能详细说明一下你遇到的问题吗?例如,您看到的错误消息是什么?如果在Windows资源管理器中右键单击HTML文件,是否在上下文菜单中看到“打印”选项?如果您没有看到这样的选项,那么您可能想先尝试修复它。我没有看到打印选项。我怎样才能解决这个新问题?!我真的不知道你会怎么解决这个问题。暗中试探一下,如果IE不是默认浏览器,你可以尝试将其设置为默认浏览器;如果你还没有IE,你可以尝试安装更新版本的IE;如果其他所有操作都失败,你可以擦除机器并重新安装所有窗口。但我认为这超出了你最初问题的范围。也许你可以试着在superuser.com上提问,这可能是解决这个新问题的更好的地方。
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();
}