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下的默认位置.
您应该使用[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的存在,并只安装正确的元素.