zoukankan      html  css  js  c++  java
  • 与wmi交互,调非托管代码,单元测试遇到的一些问题

    做监视刷卡动作的程序

    刷卡后会产生消息,外部能通过wmi的方式获取实时的刷卡动作的数据

    程序监听

    new ManagementEventWatcher 建对象

    watcher.EventArrived 注册事件处理方法

    e.NewEvent.GetPropertyValue("Time"); 通过这种方式来获取想要的数据,这个名字一般是卡那边厂商提供你才知道的

    接下来就是去调海康摄像头抓图,sdk提供的dll全是C++封装的。这个真不友好

    出于安全考虑,获取wmi消息不能远程,所以本机不能测试

    对这些三方sdk不熟,不能测试,代码盲写,这是巨坑,只好用单元测试模拟

    单元测试不能正常运行,遇到些问题

    修改测试配置,选相应的选项, 如x64

     

    wmi的EventArrivedEventArgs不能手动创建,EventArgs强转也报错,但是李氏替换,父转子想想也不可能

    那就没法测试了吗?

    大不了我不直接调这个事件处理方法,另写一个方法完全复制这个事件处理方法,把事件参数都干掉,加上需要的参数,需要什么我传什么!

    果然成了,

    继续f10,又出问题了,找不到配置信息

    原来测试程序使用自己的config文件,那就把config文件复制到测试项目下

    ,ok了

     后面要求远程方式链接wmi,但是只有内部的某台机器能联。开发这边还是不能联。

    //watcher.EventArrived += new EventArrivedEventHandler(HandleEvent);
                    //watcher.Start(); //远程连wmi行不通,报错。

    尝试了很多办法报错:RPC不可用,去使用了微软官方的链接工具wmi code creator连接也会报错,排除了代码层面的问题。

    微软帖子有牛人给了解决办法太麻烦(连接的两边都要做一些windows底层的各种安全配置),不太可行。。。

    发现微软文档示例中使用的是:WaitForNextEvent(),咱也试试看
    while (true)
                    {
                        var e = watcher.WaitForNextEvent();
                        var Time = e["Time"] == null ? "" : e["Time"].ToString();
                        //HandleWaitForNextEventFunc(e);
                        HandleWaitForNextEventFunc(Time);
                    }

    总的来说还是可以

  • 相关阅读:
    https://www.cnblogs.com/marost/p/4668664.html
    UEFI 坑 Ubuntu
    Spring《六》管理Bean
    Spring《五》集合的注入方式
    Spring《四-一》解决自动装配的问题
    spring《四》自动装配
    Spring《三》ref 引用其他bean
    Spring《二》 Bean的生命周期
    Spring《一》
    Fragment间相互调用并传值
  • 原文地址:https://www.cnblogs.com/mmclog/p/14250549.html
Copyright © 2011-2022 走看看