有没有办法在app.config文件中指定服务名称?

时间:2009-07-09 10:05:14

标签: windows-services installer app-config

我想在app.config中指定我的服务名称,而无需重复和重复安装/卸载我的服务。 但只是从app.config中检索服务名称,该服务似乎忽略了它。有什么特别的技巧如何获得这个? 提前谢谢。

我指的是经典的Windows服务。我认为这里不需要任何代码。我只想动态地从app.config中检索服务名称。

5 个答案:

答案 0 :(得分:4)

在互联网上搜索并阅读文章后,我更清楚的是,无法以动态的方式在app.config中指定服务名称,而是可以使用sc命令执行类似的解决方案。您可以在app.config中指定其他配置变量,并使用sc重命名

sc.exe创建“servicename”binPath =“myservicepath.exe”

答案 1 :(得分:3)

答案 2 :(得分:3)

http://www.codeproject.com/Articles/21320/Multiple-Instance-NET-Windows-Service

<add key="ServiceName" value="I"/>

 [RunInstaller(true)]
    public class ServiceInstaller1 : Installer
    {
        internal static string ServiceNameDefault = "My Service";

        internal static string ServiceName = GetConfigurationValue("ServiceName");

        /// <summary>
        /// Public Constructor for WindowsServiceInstaller.
        /// - Put all of your Initialization code here.
        /// </summary>
        public ServiceInstaller1()
        {
            var serviceProcessInstaller =   new ServiceProcessInstaller();
            var serviceInstaller = new ServiceInstaller();

            //# Service Account Information
            serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
            //serviceProcessInstaller.Username = null;
            //serviceProcessInstaller.Password = null;

            //# Service Information
            serviceInstaller.DisplayName = ServiceName;
            serviceInstaller.StartType = ServiceStartMode.Manual;

            //# This must be identical to the WindowsService.ServiceBase name
            //# set in the constructor of WindowsService.cs
            serviceInstaller.ServiceName = ServiceName;

            Installers.Add(serviceProcessInstaller);
            Installers.Add(serviceInstaller);
        }

        private static string GetConfigurationValue(string key)
        {
            Assembly service = Assembly.GetAssembly(typeof(Service));

            Configuration config = ConfigurationManager.OpenExeConfiguration(service.Location);

            if (config.AppSettings.Settings[key] != null)
                return ServiceNameDefault + " " + config.AppSettings.Settings[key].Value;
            else
                return ServiceNameDefault;
        }
    }

答案 3 :(得分:2)

假设您的意思是Windows服务,答案是否定的。该服务必须安装在注册表中,名称是注册表项之一。

答案 4 :(得分:2)