我想将我的Windows服务’登录的用户名/密码信息存储为app.config中的’用户。
所以在我的安装程序中,我试图从app.config中获取用户名/密码并设置…
你真的不应该在app.config文件中存储密码,这非常糟糕。您需要使用服务帐户,当前用户或提示他们。用户也可以右键单击.exe(可能是触发安装的内容)并选择“run as”在安装之前更改其凭据(在这种情况下,当前用户将是一个很好的选择)。
此外,在服务管理器中,用户可以在安装结束后更改服务应该运行的用户。但您绝对不希望将密码存储在纯文本文件中。
我在服务安装程序中遇到了同样的问题。您必须调用配置文件“myService.exe.config”并使用OpenExeConfiguration方法和程序集路径来查找正确的配置文件(如第一个答案中所述,当您的安装程序运行时,基本目录是installUtil的目录而不是您的安装程序)
{ Assembly __ServiceAssembly = Assembly.GetAssembly(typeof(MyServiceInstaller)); Configuration config = ConfigurationManager.OpenExeConfiguration(__ServiceAssembly.Location); KeyValueConfigurationCollection svcSettings = config.AppSettings.Settings; info("Service name : " + svcSettings["ServiceName"].Value); }
如果您不想遵循“myService.exe.config”格式,请使用exeConfigurationFileMap:
{ Assembly __ServiceAssembly = Assembly.GetAssembly(typeof(SyslogServiceInstaller)); ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap(); configFileMap.ExeConfigFilename = Path.Combine(Directory.GetParent(__ServiceAssembly.Location).ToString(), "App.config"); Configuration config = ConfigurationManager.OpenMappedExeConfiguration( configFileMap, ConfigurationUserLevel.None); KeyValueConfigurationCollection mySettings = config.AppSettings.Settings; Console.Out.WriteLine(mySettings["ServiceName"].Value); }
问题是,当您的安装程序运行时,您仍处于安装阶段,并且您的应用程序尚未完全安装。 app.config仅在运行实际应用程序时可用。
但是,您可以执行以下操作:
关于访问安装程序中的配置文件的一些想法。
Configuration config = ConfigurationManager.OpenExeConfiguration(assemblyPath); ConnectionStringsSection csSection = config.ConnectionStrings;
装配路径可以通过以下几种方式获得: 内部Installer类实现:
this.Context.Parameters["assemblypath"].ToString();
或有时反思:
Assembly service = Assembly.GetAssembly(typeof(MyInstaller)); string assemblyPath = service.Location;