Обновите app.config после установки usng Wix # - PullRequest
2 голосов
/ 22 апреля 2020

Я совершенно новичок в Wix и wix #, я пытаюсь обновить app.config после завершения установки. Я могу добиться этого с помощью расширения Wix Util util:XmlFile, но я хочу, чтобы это было сделано с помощью wix # CustomDialog UI.

Ниже приведен код, который я пробовал

var project = new ManagedProject("MyProduct",
                             new Dir(@"%ProgramFiles%\My Company\My Product",
                                 new File("Program.cs"),
                                 new File(@"myPath\App.config")),
                              new ElevatedManagedAction(CustomActions.OnInstall, Return.check, When.After, Step.InstallFiles, Condition.NOT_Installed)
                              {
                                  UsesProperties = "CONFIG_FILE=[INSTALLDIR]App.config"
                              });

        project.Load += Msi_Load;
        project.BeforeInstall += Msi_BeforeInstall;
        project.AfterInstall += Msi_AfterInstall;

Создано CustomDialog и задано его значение для переменной сеанса после следующего

void next_Click(object sender, EventArgs e)
    {
        MsiRuntime.Session["NAME"] = name.Text;
        Shell.GoNext();
    }

Я могу получить значение сеанса в Msi_BeforeInstall, но здесь путь к app.config становится нулевым, как есть не копируется в INSTALLDIR, и когда я пытался выполнить его на Msi_AfterInstall, здесь я не получаю свойство переменной сеанса

Я также пытался сделать это с помощью CustomAction после установки

 [CustomAction]
    public static ActionResult OnInstall(Session session)
    {

        return session.HandleErrors(() =>
        {
            string configFile = session.Property("INSTALLDIR") + "App.config";
            string userName = session.Property("NAME");
            UpdateAsAppConfig(configFile, userName);
        });
    }
    static public void UpdateAsAppConfig(string configFile,string name)
    {
        var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = configFile }, ConfigurationUserLevel.None);

        config.AppSettings.Settings["MyName"].Value = name;

        config.Save();
    }

Но не получить свойство переменной сеанса. Я действительно новичок в этом, любая помощь будет оценена. Пожалуйста, помогите мне, если я делаю это неправильно или как я могу обновить мой app.config после установки.

Спасибо.

1 Ответ

0 голосов
/ 23 апреля 2020

Я знаю вашу проблему, Событие AfterInstall работает с мертвым сеансом, в данный момент оно недоступно. Если вам нужны некоторые свойства в AfterInstall моменте, вы можете использовать SetupEventArgs.Data свойство:

    private void OnBeforeInstall(SetupEventArgs arguments)
    {
        //....
        arguments.Data["MyName"] = arguments.Session["MyName"];
    }

    private void OnAfterInstall(SetupEventArgs arguments)
    {
        var propertyValue = arguments.Data["MyName"];
    }

Также свойство Data можно использовать в формах пользовательского интерфейса, показанных ПОСЛЕ ProgressBarForm. Надеюсь, это поможет вам, дайте мне знать ваши отзывы.

...