1

WiX でインストールされる VS2012 Express を使用してサービスを作成しようとしています。これは、VS のフル バージョンで提供されるテンプレートを使用せずに実行されます。クラスを ServiceBase から派生させました。プログラムが WiX を使用してインストールされた場合、ServiceInstaller から派生したクラスは必要ないと思いました (おそらく間違っています)。WiX によって作成された MSI を実行すると、エラーのフラグは立てられませんが、新しいサービスは表示されません。

Google で回答を検索しましたが、サービスの作成に必要な最小限の C# コードの例が見つかりませんでした。優れたチュートリアルへのリンク、または C# または WiX コードが不足している領域を指摘していただければ幸いです。

テンプレート サービスのコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceProcess;

namespace WixInstalledServiceTeamplate
{
    class BasicService : ServiceBase
    {
        static void Main(string[] args)
        {

        }

        public BasicService()
        {
            this.AutoLog = true;
            this.ServiceName = "MY Service Template";

        }

        protected override void OnStart(string[] args)
        {
            base.OnStart(args);

            //TODO: place your start code here
        }

        protected override void OnStop()
        {
            base.OnStop();

            //TODO: clean up any variables and stop any threads
        }

    }
}

Wix コード:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="786F7069-9C7F-4E15-A721-6B3B4D300FD9" Name="WixEditText" Language="1033" Version="0.0.0.1" Manufacturer="3M Automated Inpsection and Measurement" UpgradeCode="31956530-98A2-4C83-B3A9-5FB6B7A7AE07">
        <Package Description="Test file in a Product" Comments="Simple test" InstallerVersion="200" Compressed="yes" />
        <Media Id="1" Cabinet="simple.cab" EmbedCab="yes" />
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder" Name="PFiles">
                <Directory Id="RELEASE" Name="Release">
                    <Component Id="WIXINSTALLEDSERVICETEAMPLATE.EXE" DiskId="1" Guid="B0AEF920-4EF0-478C-9B5A-0B13F23F7E73">
                        <File Id="WIXINSTALLEDSERVICETEAMPLATE.EXE" Name="WixInstalledServiceTeamplate.exe" Source="bin\Release\WixInstalledServiceTeamplate.exe" />
                    </Component>
                </Directory>
            </Directory>
        </Directory>
        <Feature Id="Complete" Title="Install Everything" Level="1" Display="expand" ConfigurableDirectory="TARGETDIR">
            <Component Id="MYServiceTemplate" Guid="1BD8DA93-86A6-4DC4-8CE9-B59525DDFB89" Directory="TARGETDIR">
                <ServiceInstall Name="myservicetemplate" Type="ownProcess" Start="demand" ErrorControl="normal" Account="LOCAL SYSTEM" Description="test service install with wix" DisplayName="MY Service Template" Id="serviceInstall">
                </ServiceInstall>
            </Component>
            <ComponentRef Id="WIXINSTALLEDSERVICETEAMPLATE.EXE" />
        </Feature>
        <UI />
        <UIRef Id="WixUI_Minimal" />
    </Product>
</Wix>
4

1 に答える 1

3

ServiceBase だけが必要であるというあなたの仮定は正しいです。ただし、WiX では 2 つのコンポーネントではなく、1 つのコンポーネントのみが必要です。ServiceInstall はファイルを参照しません。親コンポーネントのキーファイルに暗黙的に適用されます。

EXE とコンソール アプリやサービス (バリエーション ポイント) をインストールする機能が必要な場合は、さらに複雑になります。最も簡単な方法は、DLL を考慮して、合計 3 つのコンポーネントを持つ 2 つの EXE を作成することです。

于 2013-02-07T18:35:37.097 に答える