मुझे डर है कि रजिस्ट्री से निष्पादन योग्य पथ प्राप्त करने के अलावा कोई अन्य तरीका नहीं है क्योंकि ServiceController
उस जानकारी को प्रदान नहीं करता है।
private static string GetExecutablePathForService(string serviceName, RegistryView registryView, bool throwErrorIfNonExisting)
{
string registryPath = @"SYSTEM\CurrentControlSet\Services\" + serviceName;
RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView).OpenSubKey(registryPath);
if(key==null)
{
if (throwErrorIfNonExisting)
throw new ArgumentException("Non-existent service: " + serviceName, "serviceName");
else
return null;
}
string value = key.GetValue("ImagePath").ToString();
key.Close();
if(value.StartsWith("\""))
{
value = Regex.Match(value, "\"([^\"]+)\"").Groups[1].Value;
}
return Environment.ExpandEnvironmentVariables(value);
}
exe पथ मिलने के बाद, बस संस्करण प्राप्त करने के FileVersionInfo.GetVersionInfo(exePath)
वर्ग का उपयोग करें:
यहां एक नमूना इससे पहले कि मैं बनाया था है।
क्या आपने इसे चेक आउट किया है ... http: //stackoverflow.com/questions/1357268/programmatically-retrieving-assembly-version-of-a-running-service –
@Aaron - धन्यवाद, यह शुरू करने के लिए एक अच्छी जगह है ! :) –