Я совершенно новичок в 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 после установки.
Спасибо.