我想以编程方式检查是否安装了最新版本的
Windows服务.我有:
var ctl = ServiceController.GetServices().Where(s => s.ServiceName == "MyService").FirstOrDefault(); if (ctl != null) { // now what? }
我在ServiceController接口上看不到任何会告诉我版本号的内容.我该怎么做?
解决方法
我担心除了从注册表获取可执行文件路径之外别无其他方法,因为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)类来获取版本.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。