【问题标题】:How to start a System.Diagnostics.Process in C#?如何在 C# 中启动 System.Diagnostics.Process?
【发布时间】:2010-08-07 06:16:49
【问题描述】:

当我运行这段代码时:

        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();

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

【问题讨论】:

  • 当您从 cmd.exe 写入“print file.html”时会发生什么? (确保您以运行代码的同一用户身份登录)。
  • 它说:“无法初始化设备 PRN”
  • 好像您没有安装正确的打印驱动程序。基本上,这是一个系统管理员问题。修复打印机,按照我描述的方式测试命令,当那个命令有效时,你的代码就可以工作了。
  • 我的打印机驱动程序已安装并可在其他应用程序中使用。您有解决问题的建议吗?
  • 并非如此。这显然是问题所在,因此您可以搜索您收到的错误消息,我刚刚这样做了,这导致了一些我会尝试的解决方案和故障排除过程。然而,你似乎对以这种方式帮助自己并不特别感兴趣,而且我也无意为你做你的工作。祝你好运。

标签: c# html process printing


【解决方案1】:

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

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 文件。

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

所以修改后的代码 sn-p 将如下所示:

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

【讨论】:

  • 它还有问题。看来我必须设置一个程序来打印一个 html 文件
  • 您能详细说明您遇到的问题吗?例如,您看到的错误消息是什么?如果您在 Windows 资源管理器中右键单击 HTML 文件,是否会在上下文菜单中看到“打印”选项?如果您没有看到这样的选项,那么您可能想先尝试修复它。
  • 那里没有打印选项。我该如何解决这个新问题?!
  • 我真的不知道你会如何解决这个问题。在黑暗中尝试一下,如果 IE 不是默认浏览器,您可以尝试将其设置为您的默认浏览器,或者如果您还没有安装更新版本的 IE,您可以尝试安装它,或者只是擦除您的机器和如果一切都失败了,请重新安装 Windows。但我认为这超出了您最初问题的范围。也许您可以尝试在 superuser.com 上提问,这可能是解决这个新问题的更好场所。
【解决方案2】:

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

例如:

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

【讨论】:

  • 我要打印html文件
  • 我该怎么做?使用哪个应用程序?
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 2016-05-13
  • 2011-02-05
  • 2011-04-18
  • 2011-05-02
相关资源
最近更新 更多