有没有从哪里得到的CLR ID在运行当前应用程序? 我使用性能监视器监视我的系统,并使用该实例的名称是:
ApplicationName.exe_p4952_r15_ad1
我可以得到所有其他参数编程而不是r15
它是执行代码的公共语言运行库(实例)的运行ID。 我注意到它始终是15,但最好是把它动态地避免并发症的发生。
有没有从哪里得到的CLR ID在运行当前应用程序? 我使用性能监视器监视我的系统,并使用该实例的名称是:
ApplicationName.exe_p4952_r15_ad1
我可以得到所有其他参数编程而不是r15
它是执行代码的公共语言运行库(实例)的运行ID。 我注意到它始终是15,但最好是把它动态地避免并发症的发生。
您可以即后的部分得到整个“后缀”, 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()
但鉴于以上情况,我不认为这里有必要使用上反射达到你所需要的。
至于我可以看到有没有办法预测值将是什么-这里是从报价MSDN页面您链接 (重点煤矿)
runtimeID是公共语言运行时标识符。
该制品是略微混乱,因为它提供一个其中应用的示例myapp.exe
在示例然而承载2个CLR运行时的两个实例显示为具有不同的进程ID,但相同的CLR运行时ID。
文章然而绝对没有给出什么CLR运行ID的价值将是或如何找到它的任何承诺(它甚至不把它的一个数字),这意味着,我认为其内部的事情,你不应依赖于能够计算出它是什么。
我的做法很可能会通过所有Perfmon计数器枚举和监控它们中的任何匹配您的PID这一点。 如果有一个以上的(这将如果您正在使用任何.NET 2.0组件发生),那么你就只能同时监测。
你能给什么是你正在尝试做的信息吗?
您可以通过拆分你得到的字符串很容易地找到它:
此功能拆分实例名,并搜索以“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));
}
我希望我帮你。