问题标签 [plug-and-play]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java SE - 为不同的库模块实现“即插即用”的巧妙方法
我正在尝试做一些聪明的事情。我正在创建一个天气应用程序,我们可以在其中用另一个天气 API 替换天气 API,而不会影响代码库。所以我从一个包含多个模块的 Maven 项目开始。
我有一个包含 Interface 类和 Base 类的 Base 模块。Interface 类包含对 API 的调用(所有调用都是相似的,如果不准确的话),Base 类包含 API 的属性(同样,所有属性都是相似的,如果不准确的话)。
我为我们正在测试的两个天气 API 中的每一个都有一个模块,并计划随着应用程序的发展为新的天气 API 创建更多模块。
最后,我创建了一个核心模块(包括 main)来实现我要测试的天气 API 的特定模块类。
现在,我知道最简单的方法是使用 switch 语句和枚举。但我想知道是否有更聪明的方法来做到这一点。也许使用模式?有什么建议么?
这是我刚刚描述的结构的图片:
这是 UML 表示:
这对我来说是一个学习过程。我想了解一个真正的 Java Guru 如何根据指定的配置实现适当的模块和类。
谢谢你的建议。
windows - 以编程方式禁用 Windows 在线搜索一次安装的设备驱动程序
我需要找到一种方法来以编程方式阻止 Windows 在我刚刚安装了正确的设备驱动程序后插入 USB 设备的新驱动程序时在网上搜索它。
我承认这个问题之前已经被问过和回答过。但在这种情况下接受的答案与重新配置机器的组策略设置有关。可以在此处找到已接受答案的现代MS 官方版本。但这并不能解决我的问题。我们不想重新配置客户机器,即使他们愿意,但他们不会。
我想我可能已经在有关修改 DevicePath 注册表项的相关 MS 页面上找到了答案。这表明如果我可以更改该注册表项,我可以让 Windows 在上网之前搜索设备驱动程序的附加文件夹(我们将指定)。但后来我读到了这个厄运笔记:
如果启用,Windows Update 驱动程序搜索将在 DevicePath 搜索之后执行,即使在 DevicePath 指定文件夹中找到匹配的驱动程序包也会发生。完成所有启用的搜索后,Windows 会对每个包进行排名以确定设备的最佳匹配。
换句话说,Win7 似乎假定它总是知道最好的,即使情况显然不是这样。
另一方面,我所有的参考资料都是几年前的。那么微软是否给了我们一种方法来做到这一点,而我只是没有找到它?
一些我认为无关紧要的背景细节,但如果你认为他们这样做:
我有一个带有 Web 应用程序的客户端,它与一对专用 USB 设备(一个是卡片扫描仪,另一个是标签打印机)配合使用。每台设备都有自己的安装程序,我们创建了一个 WIX 捆绑安装程序,将这些安装程序打包到一个下载中,然后依次运行每个安装程序。指示用户在下载的安装程序运行之前不要插入任一设备。但是,即使用户等待,当他们第一次插入设备时,Windows 也会进入网络,搜索更新/更好的设备驱动程序,并且对于其中一个设备,将下载并安装错误的驱动程序并渲染设备没用。
perl - Perl 尾文件 30 秒
哎呀!
这开始就像“嘿,给我 30 分钟”,但我在一天之后。基本上我要做的是检查“/var/log/messages”30秒,当有人在此期间插入USB硬盘时,执行一些命令。
所以我正在使用 Per 函数“File::Tail”,并且有点工作,但我不知道如何运行它 30 秒,tail 一直停留在那里,直到我手动退出(它就像 tail 命令一样工作)。我一直在寻找使用 fork 的解决方案,但仍然没有运气或经验。“尾”代码的一部分是这样的:
while ((defined($line=$file->read)) ) {
我感谢任何帮助或提示。如果有人使用另一个函数或其他任何方法有另一个解决方案,那很好,我需要“CGI”的代码。
windows - 如何按需停止即插即用过滤器驱动程序?
我正在开发 Windows 下的过滤器驱动程序。该驱动程序支持 PnP 以接收设备通知,它还创建一个控制设备以通过 IOCTL 与随附的用户模式服务进行通信。
据我了解,驱动程序的生命周期由 PnP 管理器控制。在处理下一个设备通知后,驱动程序将被卸载,因为此时驱动程序没有设备对象。
我需要做的是按需停止驱动程序,而不是在下一个设备到达/离开时停止。到目前为止,我认为这不是它应该工作的方式,另一方面,我没有看到任何禁止按需卸载过滤器驱动程序的逻辑。我研究了发送 STOP 控制,但我看不出如何在 PnP 驱动程序中处理它(仅适用于旧版驱动程序)。
现在我正在考虑添加特殊的 IOCTL 处理程序,这将关闭所有设备对象。但这还不够,司机的生命周期由 PnP 经理管理,所以我需要以某种方式“引起经理的注意”到我的司机身上。任何帮助表示赞赏!
如果您想知道,我需要驱动程序可以停止,以便卸载不需要重新启动。
postgresql - PostgreSQL 没有即插即用的解决方案?
使用标准 UBUNTU 16 LTS 环境。并使用enterprisedb.com/downloads PostgreSQL安装向导安装,这里是“官方建议” ......所以假设它是即插即用的。
但是基本的(对于“即插即用”)不能运行(!),psql -h localhost -U postgres
psql:致命:用户“postgres”的密码验证失败 致命:用户“postgres”的密码验证失败
用户postgres
存在,甚至在sudo passwd postgres
“postgres”之后,同样的错误。
windows - 机器上的 MAC 地址/过滤掉即插即用设备的 MAC 地址
我有以下代码在 Windows 机器上运行并填充最多 3 个 WiFi 和以太网适配器 MAC 地址的字符数组:
如何检测这些IP_ADAPTER_INFO
结构中的任何一个是否涉及即插即用设备?有这样做的标准方法吗?我一直在寻找解决方案。理想情况下,我希望从我的列表中过滤掉即插即用 WiFi 加密狗addresses
,即具有 USB 接口的加密狗类型,并允许您通过 USB 加密狗(如果可能)在 Windows 机器上运行 WiFi 连接。
windows - 在 PnP 驱动程序中删除 WDM 设备
我对设备移除有疑问。
当我们想通知 PnP 管理器设备已消失时,我们IoInvalidateDeviceRelations
使用BusRelations
. 之后,操作系统将发送IRP_MN_QUERY_DEVICE_RELATIONS
带有BusRelations
. 在这个请求处理程序中,我们将从数组中排除设备,并将做另一项必要的工作来“断开”它与总线的连接,我们还将RemovePending
在其设备扩展中设置标志。
我不明白如何在设备变为“删除待处理”之后和操作系统发送请求之前处理传入设备的 IO 请求IRP_MN_REMOVE_DEVICE
。我们应该检查RemovePending
标志并返回STATUS_DEVICE_DOES_NOT_EXIST
还是应该像往常一样继续?
现在想象一下,IRP_MN_REMOVE_DEVICE
请求终于到达了。MSDN说我们必须调用IoReleaseRemoveLockAndWait
释放当前获取的remove lock,防止后续获取,等待现有获取被释放。所以它迫使我们总是在 PnP 请求处理程序中获取删除锁IoAcquireRemoveLock
;IoReleaseRemoveLockAndWait
并用forIRP_MN_REMOVE_DEVICE
或 with IoReleaseRemoveLock
for 另一个次要代码释放它。
我不明白为什么我们需要在 PnP 请求处理程序中获取删除锁?据我了解,我们只需要为挂起的 irp 获取删除锁,并在此类 irp 完成时释放它。因此,Windows 人员可以为我们提供IoWaitForExistingRemoveLocks
例程而不是IoReleaseRemoveLockAndWait
.
对不起,如果它有点乱,我就是想不通。谢谢。
powershell - 用于启用/禁用罗技统一加密狗的 powershell 命令
我正在尝试以管理员身份运行以下 powershell 命令,以任意启用和禁用我的键盘和鼠标的 Logictech 加密狗。这是我正在尝试做的事情:
不确定这是否是禁用加密狗并稍后重新启用它的正确方法。正如您使用此命令所看到的,我收到了一个错误。
关于如何做到这一点的任何想法?
powershell - 如何在 Windows 上将“新 pnp 设备”事件记录到控制台?
我想写一些类似的东西nestat
(将新的 tcp 连接记录到控制台),但是对于带有 powershell 的 pnp 设备。
是否有一种 API 方法“订阅某种事件总线”特定于 PnP 并获取“连接”和“断开”事件?
或者只有一种方法来实现这一点是循环Get-PnpDevice
并“手动”搜索差异?
powershell - Powershell 不允许我将 disable-pnpdevice 与蓝牙设备一起使用
几天前我问了这个问题, How to connect and remove bluetooth in windows powerhell,但是每当我尝试运行代码时:
我收到此错误:
我以提升的权限运行它,并且没有错误代码enable-pnpdevice
,只有 disable-pnpdevice 有问题。
有谁知道如何做到这一点?在保罗发表评论后,我仔细检查了我是否在管理员中,我不是,但是当我这样做时,现在弹出:
Disable-PnpDevice : 不支持在 line:2 char:1 + Disable-PnpDevice -InstanceId $device.InstanceId -Confirm:$false + ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotImplemented: (Win32_PnPEntity ...B17A1&0&FAD...):ROOT\cimv2\Win32_PnPEntity) [禁用-PnpDevice],CimException + FullyQualifiedErrorId:HRESULT 0x8004100c,禁用-PnpDevice
另外,我跑了
不确定这是否是保罗所说的包含的意思。
过了一会儿,在 Paul 帮助我聊天时,我们确定我的蓝牙芯片或实际软件有问题,所以如果有人对此有任何想法,将不胜感激。