
14 September 2008, 15:42 von
klaus_b1038 mal gelesen.In einem vorherigen Artikel habe ich geschrieben, Zitat;
Das .NET Framework bietet zwar einiges an Möglichkeiten mit Prozessen umzugehen, jedoch keine um den Pfad der Datei eines bestimmten Prozess zu ermitteln. Zumindest ist mir keine bekannt.
Dann hätte ich wohl besser suchen sollen. Mittlerweile habe ich eine Möglichkeit mit Hilfe der ProcessModule-Klasse gefunden, genau dieses Problem auf verwaltetem Weg zu lösen.
Da der Prozess ja bereits als eine Instanz der Process-Klasse vorliegt, kann die Eigenschaft Mainmodule der Process-Instanz an eine neue Instanz der ProcessModule-Klasse übergeben werden. Die Klasse ProcessModule gibt mit der Eigenschaft FileName den kompletten Pfad zur Datei des Prozess zurück. So einfach kann es sein.
Zu bedenken ist allerdings noch, dass der Zugriff auf die Prozessmodule stark von den Rechten des ausführenden Benutzers abhängig ist. Zur Sicherheit sollte der Zugriff auf das Prozessmodul in einem try, catch Block verpackt werden, der eine Win32Exception verarbeitet. Diese tritt auf, wenn der Benutzer nicht die nötigen Rechte besitzt um auf das benötigte Prozessmodul zugreifen zu können. Meist ist dies der Fall, wenn auf einen Prozess zugegriffen wird der als Dienst gestartet wurde. Hier nun ein Listing der beschriebenen Vorgehensweise:
public static string GetProcessPath(int processId)
{
string fileName = null;
Process process = null;
try
{
process = Process.GetProcessById(processId);
ProcessModule processModule = process.MainModule;
fileName = processModule.FileName;
}
catch (Win32Exception)
{
// TODO:Handling Zugriff nicht erlaubt.
}
finally
{
if (process != null)
{
process.Close();
}
}
return fileName;
}Wie man an der Länge dieses Listings unschwer erkennen kann, im Vergleich zur Länge der Lösung in diesem Beitrag, bietet der verwaltete Weg eine sehr komfortable und einfache Lösung an. Es lohnt sich also meistens etwas genauer in die Dokumentation des .NET-Framework zu sehen.
Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitte "kicken" sie ihn.
