// 动态库环境注册检查 private static bool CheckRegSvrDll(out string errMsg) { string sourcePath = XMLHelper.CurSystemPath + @"Lib\OPCDAAuto.dll"; // string targetPath = Path.Combine(@"C:\Windows\SysWOW64", @"OPCDAAuto.dll"); errMsg = ""; string opcDAAUtoClsID = "28E68F9A-8D75-11D1-8DC3-3C302A000000";// 可F12到这个动态库查看它的GUID码 try { if (!Environment.Is64BitOperatingSystem) { return(true); // 32位系统无需注册 } if (COMHelper.IsRegister(opcDAAUtoClsID, out string filePath)) { // 系统已经注册该COM组件,判断路径是不是该程序自带这个dll if (sourcePath.ToUpper() == filePath.ToUpper()) { return(true); } else { // 不是同一个路径,卸载掉,重新自带的dll,防止版本不一致 if (!COMHelper.IsRegsvr32(opcDAAUtoClsID, filePath, false, out errMsg)) { errMsg = "未能成功卸载" + filePath + "这个版本dll,无法解决版本一致性问题"; } } } if (!File.Exists(sourcePath)) { errMsg = "未发现该文件,注册失败" + sourcePath; } bool a = COMHelper.IsRegsvr32(opcDAAUtoClsID, sourcePath, true, out errMsg); return(a); } catch (Exception e) { errMsg = e.Message + e.StackTrace; return(false); } }