2013-07-27 20 views
4

我有以下變量如何獲得[ProgramFilesFolder]填充到 「C: Program Files文件」 燒UI項目

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

燒傷捆綁在下列財產我引導程序UI項目的主視圖模型

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框架來獲取Program Files文件夾爲我的WPF UI,但好像我應該能夠從維克斯包得到它。此外,Wix日誌顯示我正在從我的用戶界面設置INSTALLFOLDER屬性。

我的引導程序運行是這樣的:

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,但它似乎沒有解決這個問題。

回答

5

在你get方法,你應該能夠使用它來獲取財產的實際價值:

get 
{ 
    if (_Engine.StringVariables.Contains("INSTALLFOLDER")) 
     return _Engine.FormatString("[INSTALLFOLDER]"); 
    return string.Empty; 
} 
+0

哇,感謝戴夫!我一直在玩弄這個問題一個星期了,而我在任何地方都沒有看到這個語法。看起來實際是:_Engine.FormatString(「[INSTALLFOLDER]」); –

+0

糟糕,我的錯誤。我更正了方法名稱。 –

相關問題