2

使用 WiX (Windows Installer XML) 我创建了一个 MSI 安装程序,它将 Word 模板安装到用户应用程序数据文件夹中,例如在 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 不是检索应用程序数据文件夹的正确方法吗?还是我必须考虑在 Vista 上的另一处房产?

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

4

4 回答 4

6

您应该改用[AppDataFolder]我在Windows 安装程序属性参考中找不到任何关于“appdir”的信息。

问题编辑后编辑:您从中获取 appdir 值的shell 文件夹键(很棒的博文顺便说一句)是一种非常古老且已弃用的获取系统文件夹的方法。它只是为了向后兼容,你不应该依赖它。特别是如果你住在 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 是否存在,并只安装正确的元素。

于 2009-01-20T23:20:34.563 回答
1

一些附加信息:

包含特殊文件夹的 MSI 属性参考:

http://msdn.microsoft.com/en-us/library/aa370905(VS.85).aspx#system_folder_properties

以及相关博客文章的链接:

.NET 中的 Environment.SpecialFolder.ApplicationData 的 WiX 等价物是什么?

于 2009-01-21T00:38:44.970 回答
1

Divo - 针对您对本地化 Vista 安装的评论,问题可能不是本地化 Vista(除非我读错了),而是本地化 Office。

Microsoft\Templates例如,可能会成为Microsoft\Vorlagen 德国办事处。这真是让人头疼,因为我还没有找到可靠的文档来源,说明哪些文件夹名称已在 Office 中本地化,哪些没有。

我的特殊问题是将宏安装到[AppDataFolder]Microsft\Word\STARTUP-仅针对某些语言进行了本地化。#$%# 最后我们只是让客户手动移动模板,我们的大多数市场都没有问题,但我们注意到意大利和土耳其办事处以及其他几个似乎表现出这种相当烦人的行为。

于 2009-01-21T01:54:32.367 回答
0

在 Vista 上,有一个名为 TemplateFolder 的新标准文件夹可用。我认为这就是你想要的。要在 WiX 中使用它,只需执行以下操作:

<DirectoryRef Id="TARGETDIR">
   <Directory Id="TemplateFolder" Name="Templates"/>
</DirectoryRef>

然后,您可以在任何需要的地方引用 TemplateFolder 目录。

于 2009-01-21T06:23:32.497 回答