修改c#代码,使其在有或没有设备驱动程序的情况下都能工作
本文关键字:设备驱动程序 情况下 工作 代码 修改 | 更新日期: 2023-09-27 18:11:35
我目前正在研究一个程序,它可以与我们的客户可能购买也可能不购买的外围设备进行交互。这个设备有点让人头疼;我们购买它的公司希望我们的客户使用该公司自己的可执行文件来安装设备驱动程序。
然而,因为不是所有的客户都会购买设备,如果他们不必总是运行第二个可执行文件来让我们的软件工作,这将是有用的。为了使这成为可能,我需要修改我们的程序,使其在有驱动程序和没有驱动程序的情况下都能工作。
ActiveX控件用于与设备交互。这些需要放在GUI使用Windows窗体设计器;手动实例化控件会使它容易崩溃,这很令人恼火。
有没有"最好"的方法,可以设置一个程序来检测缺失的司机和避免崩溃?我唯一想到的是:
- 手动实例化控件并使用try/catch语句来检测和处理丢失的驱动程序,但我认为这种解决方案不可行。
- 创建可以使用该设备的每个表单的2个版本。这是一个糟糕的主意,因为当在一个版本的表单上进行更改时,需要仔细复制。
在这种情况下,典型的最佳选择是使用Facade或Adapter模式,通常与Factory结合使用。
创建一个接口到支持不存在的设备,然后实现接口的两个版本,一个实现功能,另一个报告它不存在。
然后使用它的每个UI将调用一个工厂来创建实例对象(根据需要选择上面两个选择之一),并通过接口查询对象以显示控件或表面功能。
其余的UI元素将保持不变,不需要在两个地方维护。
我的方法是在启动时确定驱动程序(如果以后不能添加设备,则安装将是一个选项)。
然后设置一个"全局变量"(对于这种类型的应用程序值,我的目标是使用Singleton)来声明驱动程序是否存在。然后,您可以根据该值是真还是假派生代码。
我不明白的是为什么用户界面是绑定到驱动程序在场。您应该能够在堆栈中更深层地塑造表示层的数据,并避免"当驱动程序不存在时UI爆炸"。您可能仍然需要一些特定于"驱动程序数据存在"的逻辑,但这很容易处理,而不必担心走过雷区。
System.Management.SelectQuery("Win32_SystemDriver");