添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
GitHub

electron 调用 devcon.exe 实现扫描检测硬件改动

electron 调用 devcon.exe 实现扫描检测硬件改动

2020-11-24 electron

公司某产品形态为显微镜 + 摄像头 + 软件,即可以理解为通过摄像头把显微镜下的视野内容显示到软件中。近期有不少客户反馈打开软件时,界面会黑屏,即看不到镜下的图像。因办公室环境一直没能重现,故猜测有可能的几种情况如下:

  1. 电脑未识别到摄像头设备;
  2. 摄像头驱动掉了;
  3. usb 数据线松动;

本文记录了针对情况 1 的处理方案,电脑未识别到摄像头时,设备管理器中的"图像设备"下是找不到该设备的,但是可以通过"扫描检测硬件改动"的操作让电脑重新检测系统接入的其他设备,那么这个功能如何集成到程序中呢?

经过一番 search 后,发现了一个叫 devcon.exe 的命令工具,安装步骤可见 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/devtest/devcon ,又或者直接从我的百度网盘下载:

链接:https://pan.baidu.com/s/16drMoIzl5OvaQIIrVzhMMw
提取码:wfi2
1
2

下载后配置好环境变量即可运行,我们先来测试一下,先运行 devcon -help 即可看到所有支持的命令

可以看到有一个 rescan 的命令,这个就是用来实现"扫描检测硬件改动"功能的命令,我们来试着执行一下试试

执行成功,接下来我们将 devcon.exe 放到前端的静态资源目录中,供客户端进行下载使用,在页面中先判断本地是否有 devcon.exe,有的话直接执行命令,没有的话先从服务器上下载,然后再执行命令,代码大致如下:

if (window.cr) {
    let hasCommandTool = window.fs.existsSync('./devcon.exe');
    if (!hasCommandTool) {
        const response = await axios({
            url: '/devcon.exe',
            method: 'GET',
            responseType: 'blob'
        });
        await this.saveBlob2File(response.data, './devcon.exe');
    window.cr.exec(window.path.resolve('./') + '\\devcon.exe rescan', function(err, stdout) {
        if (err) {
            console.log(err)
            alert('重置失败,请使用管理员身份运行智睫!');
        } else {
            console.log(stdout);
            alert('重置成功,即将自动刷新!');
            location.reload();
    });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

这里需要注意,调用 devcon.exe 需要管理员权限,不然的话会 failed。至此,到客户发现黑屏的情况时,直接点击软件中的"重置"按钮即可重新扫描硬件改动尝试进行修复,具体使用情况以及是否从根本上解决了黑屏问题后面再更新。

Last Updated: 2020/11/26 11:14:33
欢迎来到 cooljser'blog