1
我試過這個C#代碼來將打印機和打印機驅動程序添加到Windows。它在Windows 7上工作,但不在Windows 8上。代碼調用moPrinter.Put()
時發生異常(通用故障)。任何人都可以說出爲什麼在運行Windows 8時遇到此錯誤,爲什麼不是Windows 7?安裝打印機驅動程序的代碼適用於Windows 7,但不適用於Windows 8
public static bool AddCanonPrinter()
{
bool flag = true;
try
{
String portNumber = "9100";
String printerIP = "157.198.192.42";
String portName = "IP_" + printerIP;
ConnectionOptions options = new ConnectionOptions();
options.EnablePrivileges = true;
ManagementScope mscope = new ManagementScope(ManagementPath.DefaultPath, options);
mscope.Connect();
ManagementPath mpPort = new ManagementPath("Win32_TCPIPPrinterPort");
ManagementClass mcPort = new ManagementClass(mscope, mpPort, new ObjectGetOptions());
ManagementObject moPort = mcPort.CreateInstance();
moPort.Properties["Name"].Value = portName;
moPort.Properties["HostAddress"].Value = printerIP;
moPort.Properties["PortNumber"].Value = portNumber;
moPort.Properties["Protocol"].Value = 1;
moPort.Put();
ManagementPath mpPrinter = new System.Management.ManagementPath("Win32_Printer");
ManagementClass mcPrinter = new ManagementClass(mscope, mpPrinter, new ObjectGetOptions());
ManagementObject moPrinter = mcPrinter.CreateInstance();
moPrinter.Properties["Name"].Value = "Canon";
moPrinter.Properties["DeviceID"].Value = "Canon";
moPrinter.Properties["DriverName"].Value = "Canon iR C2880/C3380";
moPrinter.Properties["PortName"].Value = portName;
moPrinter.Properties["Network"].Value = true;
moPrinter.Properties["Shared"].Value = false;
moPrinter.Put();
}
catch
{
int msgCode = Marshal.GetLastWin32Error();
string msg = GetSystemMessage(msgCode);
flag = false;
}
return flag;
}
成功的作品是有辦法通過代碼或文件系統的任何位置檢索可用的打印機驅動程序名稱 – Gomiunik 2014-12-11 16:45:17
是的。打印機驅動程序的列表存儲在註冊表中的SYSTEM \ CurrentControlSet \ Control \ Print \ Environments \ Windows x64 \ Drivers \ Version-3中。 (用windows x86 for 32bit驅動程序替換windows x64) – 2015-02-03 07:53:23