为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 C# 检索 macOS 上已安装的打印机

如何使用 C# 检索 macOS 上已安装的打印机

C#
潇湘沐 2023-09-16 17:47:44
我正在编写一个控制台应用程序,该应用程序需要做的事情之一是检索所有用户安装的打印机(及其纸张来源)的列表。我们可以通过 Windows 上的 System.Drawing.Printing.PrinterSettings.InstalledPrinters 轻松获取此信息,但在 macOS 上访问相同的属性似乎会返回一个空列表。我们在此应用程序中使用 .NET Core v2.2。我们使用的代码如下:foreach (string pName in PrinterSettings.InstalledPrinters) {  // this should iterate each of the installed printers}在 Windows 上,它会按预期迭代每台打印机。但在 Mac 上,它什么也不做。InstalledPrinters 属性是否在 macOS 上不起作用,或者是否可能有其他原因阻止其正常工作?如果它不起作用,还有其他方法来检索列表吗?
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

是的,我也有同样的问题。添加System.Drawing.Common命名空间就可以了。然后就可以解析命名空间了。我的列表中充满了可用的打印机。



查看完整回答
反对 回复 2023-09-16
?
喵喔喔

TA贡献1735条经验 获得超5个赞

Lpinfo (CUPS) 解决方法:


using System.Diagnostics;

var startInfo = new ProcessStartInfo("lpstat", "-p")

                {

                    RedirectStandardOutput = true,

                    CreateNoWindow         = true

                };

var process   = Process.Start(startInfo);

var output = await process.StandardOutput.ReadToEndAsync();

var printerNames = output.Split("\n", StringSplitOptions.RemoveEmptyEntries)

                         .Select(line => line.Split(" ")[1])

                         .Where(name => !string.IsNullOrWhiteSpace(name))

                         .ToArray();

await process.WaitForExitAsync();


Console.WriteLine(string.Join("\n",printerNames));


查看完整回答
反对 回复 2023-09-16
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

对我来说听起来像是 .NET Core 中的一个错误。

您使用什么版本的 .NET Core?

.NET Core 2.1(及更高版本)具有在 macOS/Linux 上实现查找 InstalledPrinters 的代码:https://github.com/dotnet/corefx/blob/master/src/System.Drawing.Common/src/System/Drawing /Printing/PrintingServices.Unix.cs

所以它应该可以工作(除非某个地方有错误)。


查看完整回答
反对 回复 2023-09-16
  • 3 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信