我用installshield为我们公司做的PDA手簿打包win7下的usb驱动安装包。
出现以下两种安装情况:
1、如果是手簿和电脑连接着(处于“未知设备”状态)进行安装,安装过程会卡住进行不下去(可能是因为电脑上提前装的Mobile Device Center检测到了手簿,占用了些东西,导致安装向导卡在“正在注册产品”状态);2、如果是断开二者的连接进行安装,就可以成功。现在最直接的办法是在安装时首先检测手簿是否和电脑已经连接,如果连接了就提醒用户断开,否则就放弃安装;也就是只在手簿和电脑断开的情况下才允许安装。请问有没有比较方便的检测手簿是否处于插入状态的函数(InstallShield自带的或者WIN API函数)或其他办法。ps:
usb驱动安装之前,如果手簿插入,在“设备管理器”中是处于“未知设备”一栏,可以查看到设备正确的pid和vid。我的一个想法是能否获取“设备管理器”中的设备信息,通过pid判断。

解决方案 »

  1.   

    我也尝试过关闭Mobile Device Center的一些服务后,将二者连接进行安装,但是依然会卡住。所以我现在已经不指望将二者连接进行安装能成功了。只想强制让用户安装前断开手簿与电脑的连接。自己认为要检测是否已连接的困难之处在于,因为本身就安装的是usb驱动,安装前如果连接了,手簿会处于“未知设备”一栏(也就是不正常的状态)。不像检测一个u盘是否已插入那么简单,可以通过盘符就能判断。
      

  2.   

    搜一下WM_DEVICECHANGE这个windows消息,你会得到帮助的
      

  3.   

    先谢一声!
    我查查看再说。不过似乎这个消息是在设备插入或拔出“时”发生的;我的情况是用户往往先把手簿连接上了(该消息已经产生过了),然后才运行usb驱动安装程序,所以在安装程序中应该捕获不到这个消息。我希望能检测到是否“已经”插入,状态。
      

  4.   

    windows的setup API里看下,检测连接还是没有问题的。
    installsheild里边其实是调用了difx API,你在installsheild里用脚本装,然后用preinstall试试
      

  5.   

    恩。我现在在尝试用setup api的函数枚举设备管理器里面所有的设备。
      

  6.   

    可以看这个:http://www.codeproject.com/KB/system/EnumDevices.aspx