如何获取当前用户%AppData%文件夹?

时间:2016-10-12 09:57:30

标签: wix windows-installer

WIX,MSI-installer。

我在我的登录名为developer的某台计算机上构建此MSI。在我的MSI中,我有这样的对话窗口:

enter image description here

但第三个变体总是包含developer用户名,即使当前用户有其他登录名......我该如何解决?

这是我对这些元素的代码:

<Control Id="rbgrPath" Type ="RadioButtonGroup"
         X="5" Y="80" Width="500" Height="100" Property="INSTALLFOLDER">
  <RadioButtonGroup Property="INSTALLFOLDER">
    <RadioButton
      Text="[$(var.PLATFORMPROGRAMFILESFOLDER)]Autodesk\ApplicationPlugins\ProxyTools.bundle\"
      Value="[$(var.PLATFORMPROGRAMFILESFOLDER)]Autodesk\ApplicationPlugins\ProxyTools.bundle\"
      Height="13" Width="500" X="5" Y="5"/>
    <RadioButton
      Text="$(env.ProgramData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\"
      Value="$(env.ProgramData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\"
      Height="13" Width="500" X="5" Y="20"/>
    <RadioButton
      Text="$(env.AppData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\"
      Value="$(env.AppData)\Autodesk\ApplicationPlugins\ProxyTools.bundle\"
      Height="13" Width="500" X="5" Y="35"/>
  </RadioButtonGroup>
</Control>

UPD

这是PLATFORMPROGRAMFILESFOLDER变量定义:

enter image description here

1 个答案:

答案 0 :(得分:4)

这是因为在构建程序包时会评估rdlAvailability和其他预处理程序字符串。在碰巧使用C:以外的系统驱动器的机器上(或者在不使用C:\ ProgramData的较旧的希望不支持的系统上),第二个单选按钮的值也将不正确。所以你应该使用运行时属性替换:

  • $(env.AppData)应替换为$(env.ProgramData)
  • [CommonAppDataFolder]应替换为$(env.AppData)[AppDataFolder]
  • 如果[LocalAppDataFolder]未解析为[$(var.PLATFORMPROGRAMFILESFOLDER)][ProgramFilesFolder],则可能会更改为[ProgramFiles64Folder]

请注意,只要您从上面引用的属性设置其值,就可以使用其他目录属性来引用这些位置。