0

私は WiX のプロジェクト参照機能を使用して、Heat を使用してプロジェクトを自動的に収集しています。WiX インストーラーはローカルと TFS2010 ビルド サーバーの両方でビルドされているため、これは特に便利です。ビルド サーバーでビルドすると、出力が別の場所にリダイレクトされます。つまり、プロジェクトを自動的に収集しないと、最近コンパイルされたアイテムの正しい場所を参照しようとすると、非常に面倒です。

サービスをインストールして開始するための次の WiX「コード」があります。

<ServiceInstall Id="MyService"
 Type="ownProcess"
 Vital="yes"
 Name="MyServiceName"
 DisplayName="My Service Display Name"
 Description="My Service Description"
 Start="auto"
 Account="[SERVICEACCOUNT]"
 Password="[SERVICEPASSWORD]"
 ErrorControl="ignore"
 Interactive="no" />
<ServiceControl Id="StartService" Name="MyServiceName" Start="install" Wait="no" />
<ServiceControl Id="StopService" Name="MyServiceName" Stop="both" Wait="yes" Remove="uninstall" />

これまでのところ、問題はありません...インストーラーがWindowsサービスをインストールして開始しようとすると、「サービス 'MyServiceName'(MyServiceName) を開始できませんでした。システムサービスを開始するのに十分な権限があることを確認してください」という問題が発生します。「無視」ボタンを選択すると、インストールは「正常に」完了しますが、マシンにインストールされているサービスを確認すると、新しいサービスがリストされていません。

オンラインで調査したところ、サービスとして実行する必要がある実行可能ファイルに KeyPath を設定する必要があるため、サービスが実際に正しくインストールされていないことが問題であると考えていますが、Heat を使用してファイルを収集しているため、これを行う方法を見つけることができません...サービスをインストールするカスタムアクションを作成しない限り、すべてのファイルがインストールされたら実行可能ファイル名を指定できます...しかし、それはそのようには聞こえません正しい解決策になるはずです...

誰かアドバイスがありますか、または同じ問題に遭遇して解決策を思いつきましたか?

ありがとう

UPDATE 07/10/10:私の WiX スクリプトには、次のものがあります。

<Directory Id="INSTALLLOCATION" Name="Dolphin Transfer Service Server" ComponentGuidGenerationSeed="AF89976D-CD66-4b94-911B-1D27F969BC14">
    <Component Id="ServiceComponent" Guid="F55415F7-803C-4a83-A677-C0F882699374">
        <ServiceInstall Id="DolphinTransferService" Type="ownProcess"...

収集したファイルのターゲット ディレクトリは INSTALLLOCATION ディレクトリです。

Orca を使用して msi を見ると、ServiceComponent と、収集された各ファイルに対して生成されたすべてのコンポーネントが表示されます。File テーブルを見ると、このコンポーネントに関連付けられたファイルはありません (ファイルごとに生成されたコンポーネントがあるため...)。ServiceInstall テーブルを見ると、インストールしようとしているコンポーネントは ServiceComponent です。

だから私どういうわけか ServiceInstall 要素をサービスexe用に生成されたコンポーネントの中に入れて、このコンポーネントを空の「ServiceComponent」コンポーネントではなくサービスとしてインストールする必要があると思いますか? しかし、このコンポーネントはビルド時に熱によって生成されるため、それ以上の進歩を遂げることができませんでした...

4

1 に答える 1

0

heat の出力は、コンポーネントごとに 1 つのファイルを持つ WXS オーサリングです。これはデフォルトの動作であり、標準のヒート スイッチを使用して変更することはできません。これは、コンポーネントのルールにネイティブに従うために行われました。

コンポーネントに 1 つのファイルが含まれる場合、このファイルは自動的に KeyPath になります。したがって、heat の出力を変換せず、「1 つのコンポーネント - 1 つのファイル」という規則を守らない場合、これがエラーの原因ではないはずです。

詳細ログを調べて、直面している障害の詳細な説明が含まれているかどうかを確認することをお勧めします。

于 2010-10-06T19:11:41.603 に答える