예제 #1
0
        // 动态库环境注册检查
        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);
            }
        }