2016-06-30 3 views
0

HEATを使用して別の場所からファイルを収集してインストーラ用のさまざまなコンポーネントを作成するインストーラがあります。ServiceInstallコンポーネントを別のコンポーネントのFileIdを参照するWiXインストーラに追加できます

コンポーネントの1つでは、Windowsサービスのファイルがインストールされます。 サービス自体をインストールする別のコンポーネントを追加したいのですが、コンポーネントにEXEファイルを置くと、ファイルが2回インストールされるというエラーが表示されます。

ServiceInstallコンポーネントを作成する方法はありますか?File要素を追加するのではなく、別のコンポーネントのファイルIDを参照しますか? 私はファイルをインストールするオプションを残したいが、サービスをインストールしない。

また、ファイルをコンポーネントから取り出して、現時点で入手しなければならない場合は、ハーベストスクリプトにあらゆる種類の複雑さが加わります。

コンポーネントセクションは、現時点では次のようになります。

<Component Id='UtilServiceInstall' Guid='{2B244D6C-BEC3-471f-A0FB-5E3B729EBE56}'> 
    <File Id='UtilityService' Name='UtilityService.exe' Source='UtilityService.exe' DiskId='1' KeyPath='yes' /> 
    <ServiceInstall Id="UtilService" Type="ownProcess" Name="UtilService" DisplayName="Utility Service" Description="Utility Service" Start="demand" Account="LocalSystem" ErrorControl="normal"> 
    <util:PermissionEx User="Everyone" ServicePauseContinue="yes" ServiceQueryStatus="yes" ServiceStart="yes" ServiceStop="yes" ServiceUserDefinedControl="yes" />         
    </ServiceInstall> 
    <ServiceControl Id="UtilService" Start="install" Stop="both" Remove="both" Name="UtilService" Wait="no" />         
</Component>    
+0

サービスのインストール時に同じ問題が発生しますが、手動または自動起動のいずれかをGUIのどこかで決定したい場合。 – Cavaler

答えて

2

あなたは、サービスが別で、ファイルことはできませんので、それは、インストールされたサービスは、コンポーネントのキーパスであることをServiceInstallの要件です成分。

相互排他的な2つのコンポーネントを作成することができます。一方はファイルのみ、もう一方はファイルとしてサービスとしてインストールされ、どちらか必要なものを選択します。相互に排他的な2つのコンポーネントでエラーが発生することはありません。

+0

ありがとう、私はそれが事実だと思った(KeyPathについて)。私は2つのコンポーネントを相互に排他的にすることは試みていませんが(それについて考えることさえありませんでしたが)、私は試してみましょう。 – OriginalBigBri

+0

同じファイルを2つの異なるコンポーネントでインストールすることはできないため、このソリューションは実際には機能しません。 – Cavaler

+0

@キャバリアー - それは正しくありません。互いに排他的な条件がある場合、同じファイルを2つの別個のコンポーネントからインストールすることができます。常に許可されています。古いATLマージモジュールを使用していましたが、バージョン9Xを条件とするatl.dllとVersionNTを使用していました。 – PhilDW

関連する問題