我有一个安装 Windows 服务的安装项目。
我们正在自定义日志中注册一个事件日志源,应该由 winservice 项目使用(如何以及为什么不重要)。
我的问题是安装项目默认尝试创建一个事件日志源。通过这样做,它会收到一条错误消息 ( "Error 1001" source XXX already exists on local computer
) 并回滚。
我到处找,找不到注册的地方或如何关闭它。
如何强制 Windows 服务或设置项目不创建事件日志源?
我有一个安装 Windows 服务的安装项目。
我们正在自定义日志中注册一个事件日志源,应该由 winservice 项目使用(如何以及为什么不重要)。
我的问题是安装项目默认尝试创建一个事件日志源。通过这样做,它会收到一条错误消息 ( "Error 1001" source XXX already exists on local computer
) 并回滚。
我到处找,找不到注册的地方或如何关闭它。
如何强制 Windows 服务或设置项目不创建事件日志源?
您可以删除默认值EventLogInstaller
:
namespace MyService
{
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
public ProjectInstaller()
{
InitializeComponent();
// Remove the default Event Log Installer
EventLogInstaller DefaultInstaller = null;
foreach (Installer installer in serviceInstaller1.Installers)
{
if (installer is EventLogInstaller)
{
DefaultInstaller = (EventLogInstaller)installer;
break;
}
}
if (DefaultInstaller != null)
{
serviceInstaller1.Installers.Remove(DefaultInstaller);
}
}
}
}
或者,您可以修改Log
属性:
foreach (Installer installer in serviceInstaller1.Installers)
{
if (installer is EventLogInstaller)
{
((EventLogInstaller)installer).Log = "MyLog";
break;
}
}
现在事件将成功记录到MyLog,服务启动/停止事件仍将记录到应用程序日志。
我想当你卸载服务时,有些东西没有正确卸载,特别是在事件日志中。
为了恢复重新安装服务的能力,我发现(感谢这篇文章)你需要在注册表中删除这个键(regedit.exe):
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\YOURSERVICENAME
这只是基于我的测试的猜测。
安装程序项目(或 WindowService 类)会自动创建一个与myService.ServiceName
. 这很可能是因为每次启动/停止服务时都会将启动/停止消息写入日志。这些信息需要一个来源。
换句话说:您不需要创建与 ServiceName 同名的源,因为它是为您完成的。