Puede obtener el "sufijo" completo, es decir, la parte posterior a Application.exe
utilizando la misma infraestructura que el .NET framework (por ejemplo, los contadores de rendimiento).
Existe el método System.Runtime.Versioning.VersioningHelper.MakeVersionSafeName, que puede hacer eso. Tenga en cuenta que el método se describe como "Infraestructura" y "Esta API admite la infraestructura de .NET Framework y no está destinada a ser utilizada directamente desde su código", pero de todos modos es pública. No creo que haya una forma "mejor respaldada" de obtener la información que desea. Al menos es más robusto y resistente a los cambios futuros, luego revierte la información basada en la documentación.
string suffix = System.Runtime.Versioning.VersioningHelper.MakeVersionSafeName("",
System.Runtime.Versioning.ResourceScope.Machine,
System.Runtime.Versioning.ResourceScope.AppDomain));
Esto devuelve _p4472_r16_ad1
, por ejemplo.
Por supuesto, también puede pasar directamente el nombre del contador de rendimiento para obtener directamente el nombre completo. El uso de la cadena vacía anterior es solo un truco para obtener el "sufijo".
string str = VersioningHelper.MakeVersionSafeName("Application.exe",
ResourceScope.Machine, ResourceScope.AppDomain);
// str -> "Application.exe_p4472_r16_ad1".
VersioningHelpers
La clase también tiene el método privado GetRuntimeId()
, pero teniendo en cuenta lo anterior, no creo que es necesario recurrir a utilizar la reflexión sobre esa conseguir lo que necesita.
¿El uso de Process.GetProcesses te ayuda? http://msdn.microsoft.com/en-us/library/system.diagnostics.process.getprocesses.aspx –
Parece que no tiene lo que estoy buscando. – TheGateKeeper
Eso es novedoso. ¿Qué significa "p4952" y "ad1" entonces? ¿Es este tu contador? Luego publique el código que usó para crearlo. –