2

WiX (Windows Installer XML) を使用して、Word テンプレートをユーザーの Application Data フォルダー (Windows XP など) にインストールする MSI インストーラーを作成しました。

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 で別のプロパティを検討する必要がありますか?

編集: これは、Word のテンプレート フォルダーを取得するための WiX コードの短いバージョンです。最初に、ユーザーがポリシーまたは HKCU\Software\Microsoft\Office\12.0\Common\General\UserTemplates で定義されたカスタム テンプレート フォルダーを持っているかどうかを実際に確認しています。ただし、これらのいずれも設定されていない場合、フォールバックは、上記のコードによって取得される %APPDATA%\Microsoft\Templates の下の既定の場所を使用することです。

4

4 に答える 4

6

代わりに[AppDataFolder]を使用する必要があります。Windowsインストーラーのプロパティリファレンスで「appdir」について何も見つかりません。

質問の編集後に編集: appdir 値を取得するシェル フォルダー キー (すばらしいブログ投稿)は、システム フォルダーにアクセスするための非常に古く、非推奨の方法です。これは後方互換性のためだけに存在するものであり、依存するべきではありません。特にレイモンド・チェンの近くに住んでいる場合。

編集2:本当の質問は「ユーザーのWordテンプレートフォルダーを見つける方法」であることが判明したため... Wordテンプレートフォルダーは常にあるとは限りません

[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] を含む既定値を指定することはできません (試しました)。

代わりに、2 つのコンポーネントを定義しようとします。1 つは USERTEMPLATES にインストールされ、もう 1 つは [AppData]\Microsoft\Templates にインストールされます。その後、Condition 要素を使用して USERTEMPLATES の存在をテストし、正しいものだけをインストールできます。

于 2009-01-20T23:20:34.563 に答える
1

Divo - ローカライズされた Vista のインストールに関するあなたのコメントに応えて、問題はおそらくローカライズされた Vista ではなく (私の読み方が間違っていない限り)、ローカライズされた Office にあります。

Microsoft\TemplatesMicrosoft\Vorlagen たとえば、ドイツのオフィスになるかもしれません。Office でどのフォルダ名がローカライズされていて、どのフォルダ名がローカライズされていないかについて、信頼できるドキュメントのソースが見つからないので、これはお尻の痛みです。

[AppDataFolder]Microsft\Word\STARTUP私の特定の問題は、一部の言語のみにローカライズされているマクロをインストールすることでした。#$%# 最終的には顧客に手動でテンプレートを移動させるだけで、市場の大部分には問題がありませんが、イタリアとトルコのオフィスに加えて、他のいくつかのオフィスでもこのかなり厄介な動作が見られるようです.

于 2009-01-21T01:54:32.367 に答える
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 に答える
0

Vista では、TemplateFolder という名前の新しい標準フォルダを利用できます。それがあなたの望みだと思います。WiX で使用するには、次のようにします。

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

その後、必要に応じて TemplateFolder ディレクトリを参照できます。

于 2009-01-21T06:23:32.497 に答える