Как заставить [ProgramFilesFolder] заполнить проект пользовательского интерфейса C:\Program Files

У меня есть Burn Bundle со следующей переменной

<Variable Name="INSTALLFOLDER" Type="string "Value="[ProgramFilesFolder]" />

Со следующим свойством в модели основного представления моего проекта пользовательского интерфейса начальной загрузки

 public string InstallDirectory
    {
        get
        {
            if (_Engine.StringVariables.Contains("INSTALLFOLDER"))
                return _Engine.StringVariables["INSTALLFOLDER"];
            return string.Empty;
        }
        set
        {
            if (_Engine.StringVariables.Contains("INSTALLFOLDER"))
            {
                _Engine.StringVariables["INSTALLFOLDER"] = value;
                OnPropertyChanged("InstallDirectory");
            }
        }
    }

В моем представлении WPF, текстовое поле которого привязано к свойству InstallDirectory, я вижу только "[ProgramFilesfolder]", но я надеялся увидеть что-то вроде "C:\Program Files"

Я хотел бы получить что-то вроде следующего, которое заполнит текстовое поле моего каталога установки папкой установки по умолчанию и даст пользователю возможность изменить его там.

<Variable Name='INSTALLFOLDER' Type='string' Value='[ProgramFilesFolder]$(var.AppName)' />

Я мог бы использовать Net Framework, чтобы получить папку с программными файлами для своего пользовательского интерфейса WPF, но, похоже, я смогу получить ее из пакета Wix. Также журнал Wix показывает, что я устанавливаю свойство INSTALLFOLDER из своего пользовательского интерфейса.

Мой загрузчик Run выглядит так:

    protected override void Run()
    {
        this.Engine.Log(LogLevel.Verbose, "Run has been called on the UI application.");

        CurrentDispatcher = Dispatcher.CurrentDispatcher;
        _MainWindow = new MainWindow(new MainWindowViewModel(this));

        Engine.Detect();

        _MainWindow.Show();
        Dispatcher.Run();

        Engine.Quit(0);
    }

Я подумал, что мне может понадобиться прослушать какое-то событие в BootstrapperApplication, после чего я мог бы активировать свойство, измененное для свойства InstallDirectory, но пока не нашел ничего интересного.

Я просмотрел Руководство разработчика для версии 3.6, и, похоже, в нем не рассматривается именно эта проблема, хотя последние две главы посвящены проектам записи и WPF.


person Paul Matovich    schedule 27.07.2013    source источник


Ответы (1)


В вашем методе get вы должны иметь возможность использовать это, чтобы получить фактическое значение свойства:

get
{
    if (_Engine.StringVariables.Contains("INSTALLFOLDER"))
        return _Engine.FormatString("[INSTALLFOLDER]");
    return string.Empty;
}
person Dave Andersen    schedule 29.07.2013
comment
Вау, спасибо, Дэйв! Я играюсь с этой проблемой уже неделю, и я просто нигде не видел этого синтаксиса. Похоже, что на самом деле это: _Engine.FormatString([INSTALLFOLDER]); - person Paul Matovich; 30.07.2013