从 ProgID 获取 dll 目录

本文关键字:目录 dll 获取 ProgID | 更新日期: 2023-09-27 18:31:44

我正在使用加载一个 dll

Type progID =  Type.GetTypeFromProgID(SimpleConfiguration.currentConfiguration.OPOSWrappedSO);

我还想将此 dll 的路径添加到 PATH 环境变量中。有没有办法从类型中获取目录?

谢谢

从 ProgID 获取 dll 目录

    public static string GetDLLPathFromClassID(string classID)
    {
        var regPath = @"'CLSID'" + classID + @"'InProcServer32'";
        return  GetDefaultRegistryValue(Registry.ClassesRoot, regPath);
    }
    public static string GetClassIDFromProgID(string progID)
    {
            var regPath =   progID + @"'CLSID'";
            return  GetDefaultRegistryValue(Registry.ClassesRoot, regPath);
    }
    private static string GetDefaultRegistryValue(RegistryKey rootKey, string regPath)
    {
        try
        {
            var regPermission = new RegistryPermission(RegistryPermissionAccess.Read,
                                                       @"HKEY_CLASSES_ROOT'" + regPath);
            regPermission.Demand();
            using (var regKey = rootKey.OpenSubKey(regPath))
            {
                if (regKey != null)
                {
                    string defaultValue = (string) regKey.GetValue("");
                    {
                        return defaultValue;
                    }
                }
            }
        }catch(Exception e)
        {
           //log error
        }
        return "";
    }
    public static string GetDLLDirectoryFromProgID(string progID)
    {
        var classID = GetClassIDFromProgID(progID);
        var fileName = GetDLLPathFromClassID(classID);
        if(string.IsNullOrEmpty(fileName))
        {
            return "";
        }
        return Path.GetDirectoryName(fileName);
    }