Как я могу установить параметры настройки приложения во время установки (через класс установщика)

Это выглядит как интересный случай арифметических ошибок с плавающей запятой, приводящих к неправильной сумме. Дополнительную информацию можно найти в документации по python.

Вот пример того, что происходит:

>>> 0.1 + 0.6 + 0.1 + 0.1 + 0.1 == 1
False

Решение было бы проверить, находится ли сумма в пределах некоторой погрешности 1:

comb = [c for c in itertools.product(number, repeat=5) if abs(sum(c)  - 1) <= .01]

В качестве альтернативы, вы можно округлить сумму и сравнить, чтобы исправить проблему, например, так:

comb = [c for c in itertools.product(number, repeat=5) if round(sum(c), 2) == 1]

6
задан 5377037 3 September 2019 в 14:35
поделиться

3 ответа

То, что я делаю для своих установщиков, должно использовать атрибут "файла" в Приложении. Конфигурация. appSettings блок берет атрибут "файла", как так:

<appSettings file="user.config">
    <add key="foo" value="some value unchanged by setup"/>
</appSettings>

Атрибут "файла" является видом подобного CSS в этом самые определенные победы установки. Если Вам определили "нечто" в user.config, а также App.config, значение в user.config используется.

Затем у меня есть генератор конфигурации, который выписывает второй appSettings блок к user.config (или независимо от того, что Вы хотите назвать его), с помощью значений в словаре.

using System.Collections.Generic;
using System.Text;
using System.Xml;

namespace Utils
{
    public class ConfigGenerator
    {
        public static void WriteExternalAppConfig(string configFilePath, IDictionary<string, string> userConfiguration)
        {
            using (XmlTextWriter xw = new XmlTextWriter(configFilePath, Encoding.UTF8))
            {
                xw.Formatting = Formatting.Indented;
                xw.Indentation = 4;
                xw.WriteStartDocument();
                xw.WriteStartElement("appSettings");

                foreach (KeyValuePair<string, string> pair in userConfiguration)
                {
                    xw.WriteStartElement("add");
                    xw.WriteAttributeString("key", pair.Key);
                    xw.WriteAttributeString("value", pair.Value);
                    xw.WriteEndElement();
                }

                xw.WriteEndElement();
                xw.WriteEndDocument();
            }
        }
    }
}

В Вашем установщике просто добавьте что-то как следующее в Вашем методе Установки:

string configFilePath = string.Format("{0}{1}User.config", targetDir, Path.DirectorySeparatorChar);

IDictionary<string, string> userConfiguration = new Dictionary<string, string>();

userConfiguration["Server"] = Context.Parameters["Server"];
userConfiguration["Port"] = Context.Parameters["Port"];

ConfigGenerator.WriteExternalAppConfig(configFilePath, userConfiguration);

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

Надеюсь, это поможет.

5
ответ дан 17 December 2019 в 04:53
поделиться

Хорошо в конце я сдался и имел тип RunOnce метода, чтобы сделать этот материал после того, как приложение было установлено.

0
ответ дан 17 December 2019 в 04:53
поделиться

Я честно не знаю, поддерживается ли это во время установщика - но если это, удостоверьтесь, что Вы звоните Save() на Settings.Default.

0
ответ дан 17 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: