Wix + log4net:安装服务后Windows服务不记录

时间:2015-10-20 13:44:16

标签: c# wix windows-services log4net

我正在尝试创建一个Windows服务,它将使用log4net记录所有服务的操作。该服务将使用Wix安装。

我已经尝试了几乎所有的东西,但我仍然遇到问题。该服务已安装并正在运行,但log4net未生成任何日志文件(我正在写入.txt文件)。这是我的文件:

内部App.config

<configSections>
    <!-- Log4net config section -->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
  </configSections>

  <log4net debug="true">    
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs\.log" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <datePattern value="dd_MM_yyyy" />
      <preserveLogFileNameExtension value="true" />
      <staticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date{dd/MM/yyyy HH:mm:ss} [%thread] %level %property{log4net:HostName} - %property{log4net:UserHostAddress}: %logger - %message %newline" />
      </layout>
    </appender>
    <root>
      <level value="INFO" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>

的AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

Service1.cs

protected override void OnStart(string[] args)
{
    log4net.ILog logger = log4net.LogManager.GetLogger(typeof(Service1));

    logger.Info("Service Started");

    this.timer = new Timer();
    this.timer.Elapsed += new ElapsedEventHandler(this.timerLog_Tick);
    this.timer.Interval = 6000;
    this.timer.Start();
}

WIX配置

<?xml version="1.0" encoding="UTF-8"?>

<?define ProductVersion="1.0.0.0" ?>
<?define UpgradeCode="{7E57F5D8-A768-4016-8E1F-9C01833B1E20}" ?>
<?define Manufacturer="Company" ?>
<?define ProductName="ProductName1" ?>
<?define SkuName="ProductName1" ?>

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">  
    <Product Id="*" Name="$(var.ProductName)" Language="1046" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)" Codepage="65001">

    <Package InstallerVersion="301"
                 Compressed="yes"
                 Languages="1046"
                 SummaryCodepage="1251"
                 Platform="x86" />

    <Media Id="1"
        Cabinet="$(var.SkuName).cab"
        EmbedCab="yes" />

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="CompanyFolder" Name="Company">
          <Directory Id="ProductDirectory" Name="$(var.ProductName)" />
        </Directory>
      </Directory>
    </Directory>

    <ComponentGroup Id="MainComponentGroup">
      <Component Directory="ProductDirectory">
        <File Name="$(var.My.Service.Test.TargetFileName)"
                      Source="$(var.My.Service.Test.TargetPath)"
                      KeyPath="yes"
                      Vital="yes" />
        <ServiceInstall Id="SeviceInstall"
                                Name="$(var.ProductName)"
                                DisplayName="$(var.ProductName)"
                                Type="ownProcess"
                                Interactive="no"
                                Start="auto"
                                Vital="yes"
                                ErrorControl="normal"
                                Account="LocalSystem">
        </ServiceInstall>
        <ServiceControl Id="ServiceControl_Start"
                                Name="$(var.ProductName)"
                                Start="install"
                                Wait="no" />
        <ServiceControl Id="ServiceControl_Stop"
                                Name="$(var.ProductName)"
                                Stop="both"
                                Remove="uninstall"
                                Wait="yes" />
      </Component>

      <Component Id="ProductDependecies" Directory="ProductDirectory" Guid="73D7C322-1E51-44AE-AB27-DCF72E238078">
        <File Name="My.Service.Test.exe.config"
                      Source="$(var.My.Service.Test.TargetDir)My.Service.Test.exe.config"
                      Vital="yes" />

        <File Name="log4net.dll"
                      Source="$(var.My.Service.Test.TargetDir)log4net.dll"
                      Vital="yes" />

        <File Name="log4net.xml"
                      Source="$(var.My.Service.Test.TargetDir)log4net.xml"
                      Vital="yes" />

      </Component>

    </ComponentGroup>

    <Feature Id="MainFeature"
                 Level="1">
      <ComponentGroupRef Id="MainComponentGroup" />
    </Feature>
  </Product>
</Wix>

安装服务后,这些文件位于:

  1. .config file
  2. log4net.dll和log4net.xml
  3. .exe文件(服务)
  4. 当我使用Visual Studio运行服务时,会在“Logs”文件夹中正确创建日志。

    我尝试将已安装文件夹的权限授予“Everyone”,但没有成功。我甚至试图创建“Logs”文件夹并授予它权限,但也没有用。

    我搜索了很多,但没有找到关于wix + log4net的内容。在我看来,它与Wix有关,但我真的不知道它是什么。

1 个答案:

答案 0 :(得分:2)

我认为问题是当前目录不是你想象的那样。我相信如果应用程序作为服务运行,当前目录是system32文件夹,但我现在没有验证。

如果您尝试在配置中使用绝对路径(具有正确的权限),那么它应该按预期工作。