C# 即使指定了PrinterName,也始终打印到默认打印机

C# 即使指定了PrinterName,也始终打印到默认打印机,c#,printing,C#,Printing,我创建了一个windows应用程序,需要在其中以静默方式打印PDF文件 string printername="jn-01"; if (printername != "NULL") { using (PrintDialog pd = new PrintDialog()) { pd.PrinterSettings.PrinterName = printername;


我创建了一个windows应用程序,需要在其中以静默方式打印PDF文件

string printername="jn-01";

        if (printername != "NULL")
        {
            using (PrintDialog pd = new PrintDialog())
            {
                pd.PrinterSettings.PrinterName = printername;
                MessageBox.Show(printername);

                pd.PrinterSettings.Copies = 1;
                if (pd.PrinterSettings.IsValid)
                {
                    ProcessStartInfo info = new ProcessStartInfo(e.FullPath);
                    info.Verb = "PrintTo";
                    info.CreateNoWindow = true;
                    info.WindowStyle = ProcessWindowStyle.Hidden;
                    Process.Start(info);
                }
            }
我使用上面的代码进行打印。但系统始终打印到默认的pINTER。

如何解决此问题?

您正在打印对话框上设置打印机名称,但未使用打印对话框进行打印。请注意,打印时从不使用
pd
。而是使用
PrintTo
动词执行PDF文件(有效地使用
ShellExecute
)。现在,
PrintTo
verb支持将打印机名称作为命令行参数提供。您可以将其设置为
info.Arguments
。但是,要使其工作,处理PDF文件的默认应用程序需要支持它。有关这些动词的更多信息,请参阅

如果默认的PDF应用程序不支持此功能,则您可以在打印前调用,然后在打印后将其恢复为以前的值(用于先查找默认值)。请注意,这会更改用户的默认打印机,因此不应成为执行此操作时的默认选择