0

私はVS2012とVSTOで構築されたWordテンプレートのインストーラーに取り組んでいます。インストーラーの一部として、Common Files フォルダーにある vstoinstaller を実行する必要があります。x86 と x64 ではパスが異なるようですので、CommonFilesFolder プロパティを使用するのが良い解決策だと思いました。ただし、msi パッケージをビルドすると、エラーが発生します。

Fehler  4   The system cannot find the file '[CommonFilesFolder]Microsoft Shared\VSTO\10.0\VSTOInstaller.exe'.  C:\trash\WordTemplate\WordTemplateSetup\Product.wxs 31  1   WordTemplateSetup

これが私のwxsの一部です:

<Binary Id="VSTOInstaller.exe" SourceFile="[CommonFilesFolder]Microsoft Shared\VSTO\10.0\VSTOInstaller.exe" />

wxs の前処理の違いを示すサンプルをいくつか見つけましたが、実行時に正しいディレクトリを参照する必要があります。

なにか提案を?

4

2 に答える 2

0

ソース パス (SourceFile 属性値) はビルド時に解決されますが、MSI 変数値 [CommonFilesFolder] は実行時に解決されます。

$(var.Variable) などの WIX 変数を使用して、ビルド マシンのパスを取得します。WiX での環境変数の使用を参照してください。

ただし、これを使用する方法はよくわかりませんでした。このコード行 (<Binary>要素) がインストール パッケージからのものである場合、あるインストーラーを別のインストーラー内で実行することはできません。<ExePackage>この行が Burn バンドルからのものである場合、要素を使用しないのはなぜですか?

于 2013-06-20T18:24:17.803 に答える
0

最後に私はそれを作りました:

    <?define VstoInstaller="C:\Program Files\Common Files\Microsoft Shared\VSTO\10.0\VSTOInstaller.exe"?>
<CustomAction Id="RunWordVstoInstall"
              Execute="immediate"
              Directory="INSTALLLOCATION"
              Return="asyncWait"
              ExeCommand="$(var.VstoInstaller) /i [INSTALLLOCATION]\WordTemplateInstaller.vsto" 
              />
<CustomAction Id="RunWordVstoUninstall"
              Execute="immediate"
              Directory="INSTALLLOCATION"
              Return="asyncWait"
              ExeCommand="$(var.VstoInstaller)  /u [INSTALLLOCATION]\WordTemplateInstaller.vsto" 
              />
<InstallExecuteSequence>
  <Custom Action="RunWordVstoUninstall" After="CostFinalize"><![CDATA[(&WordTemplateFeature <> 3)]]></Custom>
  <Custom Action="RunWordVstoInstall" After="CustomizeVsto"><![CDATA[(&WordTemplateFeature = 3)]]></Custom>
</InstallExecuteSequence>

CustomAction エントリで「偽の」DIRECTORY を変数と一緒に使用すると、うまくいきました。私にとってはうまくいきます。

于 2013-06-25T09:29:00.003 に答える