Как получить папку данных приложения / папку шаблонов Word в Vista? - PullRequest
2 голосов
/ 21 января 2009

Используя 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>

Однако некоторые пользователи, устанавливающие файл MSI в Windows Vista , получают сообщение об ошибке, поскольку свойство APPDIR имеет значение пусто .

Является ли APPDIR неправильным способом получения папки с данными приложения? Или я должен рассмотреть другое свойство на Vista?

РЕДАКТИРОВАТЬ: это всего лишь короткая версия кода WiX для получения папки шаблона Word. Сначала я проверяю, есть ли у пользователя папка с пользовательским шаблоном, определенная политикой, или в разделе HKCU \ Software \ Microsoft \ Office \ 12.0 \ Common \ General \ UserTemplates. Однако, если ни один из них не установлен, резервным вариантом является использование местоположения по умолчанию в папке% APPDATA% \ Microsoft \ Templates, которое получается с помощью приведенного выше кода.

Ответы [ 4 ]

6 голосов
/ 21 января 2009

Вместо этого следует использовать [AppDataFolder] . Я не могу найти ничего о "appdir" в справочнике по свойствам установщика Windows 1004 *.

Редактировать после редактирования вопроса: ключ папок оболочки (кстати, отличный пост для блога) , откуда вы получаете значение appdir, является очень старым и устаревшим способом доступа к системным папкам. Это только для обратной совместимости, и вы не должны на это полагаться. Особенно, если вы живете рядом с Раймондом Ченом.

Редактировать 2 : Поскольку реальный вопрос заключается в том, «как найти папку шаблонов слов пользователя» ... Папка шаблонов слов не всегда

[AppDataFolder]\Microsoft\Templates

Это связано с тем, что папку шаблонов можно настроить в разделе tools - options - местоположения файлов - user 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 голос
/ 21 января 2009

Divo - В ответ на ваш комментарий о локализованных установках Vista проблема, вероятно, заключается не столько в локализованной Vista (если я не правильно понял), а в локализованном Office.

Microsoft\Templates может стать Microsoft\Vorlagen с немецким офисом, например. Это задница, потому что я не нашел надежного источника документации о том, какие имена папок были локализованы в Office, а какие нет.

Моя конкретная проблема была с установкой макросов на [AppDataFolder]Microsft\Word\STARTUP - локализовано только для некоторых языков. # $% # в конце концов, мы просто заставляем клиентов вручную перемещать шаблоны, у большинства наших рынков нет проблем, но мы заметили итальянский и турецкий офис, плюс несколько других, похоже, демонстрируют это довольно раздражающее поведение.

1 голос
/ 21 января 2009

Некоторая дополнительная информация:

Справочник по свойствам MSI, содержащим специальные папки:

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

И ссылка на соответствующий пост в блоге:

Что такое эквивалент WiX для Environment.SpecialFolder.ApplicationData из .NET?

0 голосов
/ 21 января 2009

В Vista доступна новая стандартная папка TemplateFolder. Я думаю , что вы хотите. Чтобы использовать его в WiX, просто сделайте что-то вроде:

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

Тогда вы можете ссылаться на Каталог TemplateFolder там, где вам это может понадобиться.

...