获取CLR ID(Getting the CLR ID)

2019-06-23 17:48发布

有没有从哪里得到的CLR ID在运行当前应用程序? 我使用性能监视器监视我的系统,并使用该实例的名称是:

ApplicationName.exe_p4952_r15_ad1

我可以得到所有其他参数编程而不是r15它是执行代码的公共语言运行库(实例)的运行ID。 我注意到它始终是15,但最好是把它动态地避免并发症的发生。

Answer 1:

您可以即后的部分得到整个“后缀”, Application.exe使用了.NET Framework(如peformance专柜)做了同样的基础设施。

还有就是方法System.Runtime.Versioning.VersioningHelper.MakeVersionSafeName ,它可以做到这一点。 请注意,该方法被描述为“基础设施”和“此API支持.NET Framework基础结构,不适合直接在代码中使用。”,但仍然是公开的。 我不认为有任何“更好的支持”的方式来获得您想要的信息。 至少它是更强大的和有弹性的未来的变化,然后反向工程基于文档的信息。

string suffix = System.Runtime.Versioning.VersioningHelper.MakeVersionSafeName("",                         
    System.Runtime.Versioning.ResourceScope.Machine,
    System.Runtime.Versioning.ResourceScope.AppDomain));

这将返回_p4472_r16_ad1 ,例如。

当然,你也可以直接通过性能计数器的基本名称,直接获得全名。 上述空字符串的使用只是一招,只得到了“后缀”。

string str = VersioningHelper.MakeVersionSafeName("Application.exe",
    ResourceScope.Machine, ResourceScope.AppDomain);

// str -> "Application.exe_p4472_r16_ad1".

该类VersioningHelpers也有私有方法GetRuntimeId()但鉴于以上情况,我不认为这里有必要使用上反射达到你所需要的。



Answer 2:

至于我可以看到有没有办法预测值将是什么-这里是从报价MSDN页面您链接 (重点煤矿)

runtimeID是公共语言运行时标识符。

该制品是略微混乱,因为它提供一个其中应用的示例myapp.exe在示例然而承载2个CLR运行时的两个实例显示为具有不同的进程ID,但相同的CLR运行时ID。

文章然而绝对没有给出什么CLR运行ID的价值将是或如何找到它的任何承诺(它甚至不把它的一个数字),这意味着,我认为其内部的事情,你不应依赖于能够计算出它是什么。

我的做法很可能会通过所有Perfmon计数器枚举和监控它们中的任何匹配您的PID这一点。 如果有一个以上的(这将如果您正在使用任何.NET 2.0组件发生),那么你就只能同时监测。

你能给什么是你正在尝试做的信息吗?



Answer 3:

您可以通过拆分你得到的字符串很容易地找到它:

此功能拆分实例名,并搜索以“R”开头,并且不与“.EXE”结束的唯一部分。 一旦串的右侧部分已经发现,只需要删除的第一个字母“r”和只是不停的数量将它转换成整数并将其返回。 如果没有找到CLR的ID,只返回“-1”,让家长函数另行通知。

    int getClrID(string instance_name)
    {
        string[] instance_name_parts = instance_name.Split('_');
        string clr_id = "";

        for (int i = 0; i < instance_name_parts.Length; i++)
        {
            if (instance_name_parts[i].StartsWith("r") && !instance_name_parts[i].EndsWith(".exe"))
            {
                clr_id = instance_name_parts[i];
                break;
            }
        }

        if (clr_id == "") // An error occured ...
            return -1;
        else 
            return Convert.ToInt32(clr_id.Substring(1));
    }

我希望我帮你。



文章来源: Getting the CLR ID
标签: c# winforms clr