Как записать в app.config в настройке проекта и использовать его в программе

  • Я создал Installhelper.cs, который является частью установщика.
  • Переопределите метод Install(), используя этот фрагмент кода (A).

Эти значения, которые вставляются в файл app.config, недоступны в файле [projectName].exe.config, который создается после установки. Я уже добавил раздел, как показано ниже в app.config вручную (B)

данные передаются в класс установщика, но данные не записываются в поля app.config. Они остаются такими же в созданном файле конфигурации во время установки.

Любая помощь с благодарностью. Я провел почти день на этом.

Код А:

[RunInstaller(true)]
public partial class Installation : System.Configuration.Install.Installer
{
    public Installation()
    {
        InitializeComponent();
    }

    public override void Install(IDictionary stateSaver)
    {
        //base.Install(stateSaver);

        try
        {
            // In order to get the value from the textBox named 'EDITA1' I needed to add the line:
            // '/PathValue = [EDITA1]' to the CustomActionData property of the CustomAction We added. 

            string userName = Context.Parameters["userName"];
            string password = Context.Parameters["password"];
            string folderPath = Context.Parameters["path"];

            MessageBox.Show(userName);
            MessageBox.Show(password);
            MessageBox.Show(folderPath);

            Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
           //config.AppSettings.Settings.Add("userName", userName);
           //config.AppSettings.Settings.Add("password", password);
           //config.AppSettings.Settings.Add("foderPath", folderPath);





            config.AppSettings.Settings["userName"].Value = userName;
            config.AppSettings.Settings["password"].Value = password;
            config.AppSettings.Settings["foderPath"].Value = folderPath;
            config.Save(ConfigurationSaveMode.Full);
            ConfigurationManager.RefreshSection("appSettings");




        }
        catch (FormatException e)
        {
            string s = e.Message;
            throw e;
        }
    }
}

Добавленный раздел в конфигурации приложения - Код B:

<appSettings>
<add key="userName" value="" />
<add key="password" value="" />
<add key="foderPath" value="" />
</appSettings>

2 ответа

Решение

Спасибо. У нас была именно эта проблема, и мы не могли понять, почему она не запишет в файл. Единственное, что я сделал, это получил путь от Приложения.

string path = Application.ExecutablePath;
Configuration config = ConfigurationManager.OpenExeConfiguration(path);

Проблема этой кодировки была в этой строке

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

Это не дает путь, где файл конфигурации полагается во время установки. Так что это должно быть изменено на

string path = Path.Combine(new DirectoryInfo(Context.Parameters["assemblypath"].ToString()).Parent.FullName, "[project name].exe")

    Configuration config = ConfigurationManager.OpenExeConfiguration(path);

Теперь это работает.:)

Другие вопросы по тегам