如何在Vista中获取Application Data文件夹/ Word模板文件夹?

Dir*_*mar 2 windows-installer wix windows-vista

使用WiX(Windows Installer XML)我创建了一个MSI安装程序,它将Word模板安装到用户Application Data文件夹中,例如在Windows XP上

C:\Documents and Settings\<user>\Application Data\Microsoft\Templates
Run Code Online (Sandbox Code Playgroud)

我正在从注册表中检索此文件夹的路径:

<Property Id="APPDIR" Secure="yes">
    <RegistrySearch Id="RegSearch_AppData" 
        Type="directory" 
        Key="Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"    
        Name="AppData" 
        Root="HKCU" />
</Property>

<CustomAction Id="ActionWordTemplateFolderAssign" 
              Property="TEMPLATEFOLDER" 
              Value="[APPDIR]Microsoft\Templates" /> 

<InstallExecuteSequence>
    <Custom Action="ActionWordTemplateFolderAssign" Sequence="1" />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

但是,某些在Windows Vista上安装MSI文件的用户收到错误,因为APPDIR属性为.

APPDIR不是检索Application Data文件夹的正确方法吗?或者我必须考虑Vista上的另一个属性?

编辑:这只是WiX代码的简短版本,用于检索Word的模板文件夹.首先,我实际上检查用户是否具有由策略或HKCU\Software\Microsoft\Office\12.0\Common\General\UserTemplates定义的自定义模板文件夹.但是,如果没有设置这些,则回退是使用由上面的代码检索的%APPDATA%\ Microsoft\Templates下的默认位置.

Wim*_*nen 6

您应该使用[AppDataFolder].我在Windows安装程序属性参考中找不到任何关于"appdir"的内容.

编辑问题编辑后:在外壳文件夹键(大博文的BTW)你来自哪里,让你的APPDIR值是一个非常古老和过时的方式来获得在系统文件夹.它只是为了向后兼容,你不应该依赖它.特别是如果你住在Raymond Chen附近.

编辑2:因为真正的问题是"如何找到用户的单词模板文件夹"...单词模板文件夹并不总是

[AppDataFolder]\Microsoft\Templates
Run Code Online (Sandbox Code Playgroud)

这是因为可以在工具 - 选项 - 文件位置 - 用户模板下配置模板文件夹.具有讽刺意味的是,如果我们要检测到这一点,我们将回到搜索注册表

  <Property Id="USERTEMPLATES">
     <RegistrySearch Id="SearchUserTemplates"
             Root="HKCU"
             Key="Software\Microsoft\Office\11.0\Common\General"
                 Name="UserTemplates"
             Type="raw" />
  </Property>
Run Code Online (Sandbox Code Playgroud)

但是,此注册表值通常不存在,并且您无法在此处指定包含[AppDataFolder]的默认值(我尝试过).

相反,我会尝试定义两个组件,一个安装到USERTEMPLATES,另一个安装到[AppData]\Microsoft\Templates.然后,您可以使用Condition元素来测试USERTEMPLATES的存在,并只安装正确的元素.