私は 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」コンポーネントではなくサービスとしてインストールする必要があると思いますか? しかし、このコンポーネントはビルド時に熱によって生成されるため、それ以上の進歩を遂げることができませんでした...