当我运行此代码时:
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();
抛出此异常:
“没有应用程序与此操作的指定文件关联”
我该怎么办?
答案 0 :(得分:1)
在您的计算机上,没有应用程序与文件类型“.html”相关联。如果您尝试在网络浏览器中查看,请考虑启动 iexplore.exe (例如,启动Internet Explorer),然后将 file.html 包括为一个参数。
例如:
Process.Start("IExplore.exe", @"C:\myPath\file.html");
答案 1 :(得分:1)
以下代码段应该可以使用,但它确实存在可能成为交易破坏者的问题(继续阅读以获得解释):
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