网站首页 > 技术教程 正文
1.前言
桌面运维同学经常会处理打印机驱动安装这类工单,手动安装打印机驱动通常包含以下步骤:
1.根据打印机型号网上查找对应打印机驱动
2.使用cmd命令进入管理员界面
3.将打印机驱动添加到window系统中
人工安装需要经过三个步骤,操作繁琐,效率较低。基于此,我们想开发一个自动化安装打印机驱动的程序,让用户可以自行安装打印机驱动,以此减少打印机驱动安装工单,提高运维效率。
2.技术实现
我们可以使用代码的方式实现人工操作的三个步骤。这里,我们程序上实现也和这三个步骤类似。
1.后台管理系统统一维护打印机驱动
2.使用程序提权,自动进入管理员环境
3.使用Devcon程序执行打印机驱动安装命令
后续的所有示例代码以C#为例。
2.1.后台管理系统
我们开发一个后台管理系统,统一维护打印机驱动,这样可以减少重复查找打印机驱动的工作,提升效率。
系统界面如下:
通过这个页面维护打印机型号、硬件ID和驱动等相关信息。
任何设备的硬件ID都是唯一的,我们可以通过程序识别打印机的硬件ID,然后根据硬件ID查询到驱动下载。
这里我们使用window的Win32_PnPEntity来获取硬件的相关信息,其结构如下:
[Dynamic, Provider("CIMWin32"), UUID("{FE28FD98-C875-11d2-B352-00104BC97924}"), AMENDMENT]
class Win32_PnPEntity : CIM_LogicalDevice
{
uint16 Availability;
string Caption;
string ClassGuid;
string CompatibleID[];
uint32 ConfigManagerErrorCode;
boolean ConfigManagerUserConfig;
string CreationClassName;
string Description;
string DeviceID;
boolean ErrorCleared;
string ErrorDescription;
string HardwareID[];
datetime InstallDate;
uint32 LastErrorCode;
string Manufacturer;
string Name;
string PNPClass;
string PNPDeviceID;
uint16 PowerManagementCapabilities[];
boolean PowerManagementSupported;
boolean Present;
string Service;
string Status;
uint16 StatusInfo;
string SystemCreationClassName;
string SystemName;
};
其中Name表示硬件名称,HardwareID表示硬件id。
打印机硬件ID识别部分代码如下:
namespace JwPrinterManage.Helper
{
internal class USBUtilTest
{
public static List<USBDeviceInfo> GetAllPrinterUsbList()
{
List<USBDeviceInfo> list = new List<USBDeviceInfo>();
ManagementObjectCollection collection;
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_PnPEntity"))
collection = searcher.Get();
foreach (ManagementObject device in collection)
{
string name = Convert.ToString(device["Name"]);
string deviceId = Convert.ToString(device["DeviceID"]);
string[] HardwareIDArr = (string[])device["HardwareID"];
if (HardwareIDArr == null || HardwareIDArr.Length == 0)
{
continue;
}
foreach (var curHardwareId in HardwareIDArr)
{
if (curHardwareId.Contains("USBPRINT"))
{
list.Add(new USBDeviceInfo(curHardwareId, name));
}
}
}
collection.Dispose();
return list;
}
}
}
以上代码可以获取到计算机的所有硬件名称、设备ID以及硬件ID,通过此方法,我们可以快速获取打印机的硬件ID,然后根据硬件ID从后台系统中查找驱动并下载到用户本地。
2.2.程序提权
安装打印机驱动,程序需要具有管理员权限,这里我们需要通过cmd命令给程序提权,保证程序具有管理员权限。
其原理是使用管理员账号和密码执行cmd运行程序,这样程序就具有管理员权限。
部分核心代码如下:
namespace JwPrinterManage.Helper
{
internal class AdminUtilsTest
{
// 使用特定账号和密码运行程序
private static void run(string userName, string pass, string exePath)
{
Process process = new Process();
string str = pass;
SecureString secureString = new SecureString();
foreach (char c in str)
secureString.AppendChar(c);
process.StartInfo.UserName = userName;
process.StartInfo.Password = secureString;
process.StartInfo.FileName = exePath;
process.StartInfo.UseShellExecute = false;
process.Start();
}
}
}
2.3.使用Devcon安装驱动
2.3.1.Devcon.exe简介
DevCon (Devcon.exe)(即设备控制台)是一种命令行工具,用于显示有关运行 Windows 的计算机上的设备的详细信息。 可以使用 DevCon 启用、禁用、安装、配置以及删除设备。
其主要语法如下:
devcon [/r] command [arguments]
其主要命令如下:
oDevCon Enable
oDevCon Disable
oDevCon Update
oDevCon UpdateNI
oDevCon Install
oDevCon Remove
oDevCon Rescan
oDevCon Restart
oDevCon Reboot
oDevCon SetHwID
oDevCon ClassFilter
oDevCon Dp_add
oDevCon Dp_delete
这里我们不详细介绍这些命令,感兴趣的同学可以查看官方文档: Devcon命令文档。
2.3.2.Devcon命令安装驱动
我们可以使用update命令来安装打印机驱动程序,devcon update命令可以安装任意驱动程序包,具体如下:
devcon update INFfile HardwareID
其中INFfile表示打印机驱动的INF文件,HardwareID表示打印机的硬件ID。
当出现如下图所示的结果时,表示打印机驱动安装成功。
3.总结
本文主要介绍打印机驱动自动化安装的一个基本实现思路,通过运维工具,我们可以实现部分桌面工单自动化,帮助运维同事提高工作效率。同时,本文也介绍了通过Win32_PnPEntity获取window硬件信息以及通过Devcon命令安装驱动的方法,这两个方法不仅限于打印机驱动安装的应用,其实际应用场景比较广泛,大家可以通过这些方法开发自动化工具,帮助提高运维工作效率。
- 上一篇: 岚图春季技术发布会,L3级智能架构技术发布
- 下一篇: 德拉诺之王邪DK报告:PVE向小测试及分析
猜你喜欢
- 2025-05-05 从virsh当中学习QEMU/KVM启动命令
- 2025-05-05 Win10 BCD文件损坏怎么修复?(bcd文件损坏win7)
- 2025-05-05 亚马逊春节假期期间的店铺管理设置
- 2025-05-05 1分钟总结常用k8s常用诊断教程(k8s常见故障)
- 2025-05-05 VisiPics重复图片查找软件中文汉化教程
- 2025-05-05 微服务的发布实现方式1灰度实现(微服务实现原理)
- 2025-05-05 轻松掌握Java多线程 - 第二章:线程的生命周期
- 2025-05-05 德拉诺之王邪DK报告:PVE向小测试及分析
你 发表评论:
欢迎- 最近发表
-
- PPT中动作连贯的卡通人物,我集齐了100套
- 成都13岁女孩手绘逐帧动画走红 网友:这是天赋型选手
- Android主流UI开源库整理(android完整开源项目)
- 达芬奇更新啦!DaVinci Resolve Studio 20.0.1
- LM Studio-本地安装大模型 | OpenAI API 文字转语音本地运行程序分享
- lululemon律动快闪 多色系呈现夏季活力
- [AOA][分享]160503 智珉和偶吧玩起电影游戏 用一件衣服找回悸动
- Visual Studio 2022:一个功能全面且强大的IDE
- 纽约布什维克区艺术家工作室开放即将举行
- 从 CANopen到 PROFINET:网关助力物流中心实现复杂的自动化升级
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)