使用WiX(Windows Installer XML)我创建了一个MSI安装程序,它将Word模板安装到用户Application Data文件夹中,例如在Windows XP上
C:\Documents and Settings\<user>\Application Data\Microsoft\Templates
我正在从注册表中检索此文件夹的路径:
<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>
但是,某些在Windows Vista 上安装MSI文件的用户会收到错误,因为 APPDIR 属性为空。
APPDIR不是检索Application Data文件夹的正确方法吗?或者我必须考虑Vista上的另一个属性?
编辑:这只是WiX代码的简短版本,用于检索Word的模板文件夹。首先,我实际上检查用户是否具有由策略或HKCU \ Software \ Microsoft \ Office \ 12.0 \ Common \ General \ UserTemplates定义的自定义模板文件夹。但是,如果没有设置这些,则回退是使用上面代码检索到的%APPDATA%\ Microsoft \ Templates下的默认位置。
答案 0 :(得分:6)
您应该使用[AppDataFolder]代替。我在windows installer property reference中找不到关于“appdir”的任何内容。
问题编辑后的编辑:获取appdir值的shell folders key (great blogpost btw)是一种非常古老且不赞成使用系统文件夹的方法。它只是为了向后兼容,你不应该依赖它。特别是如果你住在Raymond Chen附近。
编辑2 :因为真正的问题是“我如何找到用户的单词模板文件夹”...单词模板文件夹并不总是
[AppDataFolder]\Microsoft\Templates
这是因为可以在工具 - 选项 - 文件位置 - 用户模板下配置模板文件夹。具有讽刺意味的是,如果我们想要检测到这一点,我们将回到搜索注册表:
<Property Id="USERTEMPLATES">
<RegistrySearch Id="SearchUserTemplates"
Root="HKCU"
Key="Software\Microsoft\Office\11.0\Common\General"
Name="UserTemplates"
Type="raw" />
</Property>
但是,此注册表值通常不存在,并且您无法在此处指定包含[AppDataFolder]的默认值(我尝试过)。
相反,我会尝试定义两个组件,一个安装到USERTEMPLATES,另一个安装到[AppData] \ Microsoft \ Templates。然后,您可以使用Condition元素来测试USERTEMPLATES的存在,并只安装正确的元素。
答案 1 :(得分:1)
其他一些信息:
包含特殊文件夹的MSI属性的引用:
http://msdn.microsoft.com/en-us/library/aa370905(VS.85).aspx#system_folder_properties
指向相关博文的链接:
What is the WiX equivilent of Environment.SpecialFolder.ApplicationData from .NET?
答案 2 :(得分:1)
Divo - 为了回应您对本地化Vista安装的评论,问题可能不是本地化的Vista(除非我读错了),而是本地化的Office。
例如, Microsoft\Templates
可能会成为Microsoft\Vorlagen
德国办事处。这是一个痛苦的屁股,因为我没有找到一个可靠的文档来源文件夹名称已在Office中本地化,什么没有。
我的特殊问题是将宏安装到[AppDataFolder]Microsft\Word\
STARTUP
- 仅针对某些语言进行了本地化。 #$%#最后我们只是让客户手动移动模板,我们的大多数市场没有问题,但我们注意到意大利和土耳其办公室加上其他几个似乎表现出这种相当烦人的行为。
答案 3 :(得分:0)
在Vista上有一个名为TemplateFolder的新标准文件夹。我认为这就是你想要的。要在WiX中使用它,请执行以下操作:
<DirectoryRef Id="TARGETDIR">
<Directory Id="TemplateFolder" Name="Templates"/>
</DirectoryRef>
然后您可以根据需要参考TemplateFolder目录。