繁体   English   中英

当应用程序在Windows Server 2012上从Server 2008运行时无法写入事件日志

[英]Cannot write the event log when the app runs on windows server 2012 from server 2008

我将在Windows Server 2008(32位)上运行良好的应用程序从框架3.5升级到Windows Server 2012(64位)的4.5。 在应用程序中,有第三方组件在32位上运行。 我们无法升级它,因为供应商没有计划对其进行更新。 因此,我的应用程序平台目标是为任何CPU设置的,但在我的项目属性上首选32位。 除编写事件日志外,所有功能均有效。 有人会建议解决这个问题吗? 预先感谢。

我有编写事件日志的代码。

private static void RecordEventLog(string sMessage, EventLogEntryType ErrorType)
    {
        string source = "Testing App";
        string logName = "Application";
        string machineName = ".";
        if (!EventLog.SourceExists(source, machineName))
        {
            EventSourceCreationData sourceData = new EventSourceCreationData(source, logName);
            sourceData.MachineName = machineName;
            EventLog.CreateEventSource(sourceData);
        }
        new EventLog(logName, machineName, source).WriteEntry(sMessage, ErrorType);
    }

问题可能出在创建事件源的权利上-我不明白为什么32位和64位会有所不同。 您可能必须具有管理员权限(至少是第一次)运行该应用程序才能创建事件源。

MSDN

要在Windows Vista和更高版本或Windows Server 2003中创建事件源,您必须具有管理特权。

产生此要求的原因是必须搜索所有事件日志(包括安全性)以确定事件源是否唯一。 从Windows Vista开始,用户无权访问安全日志。 因此,将引发SecurityException。

在Windows Vista和更高版本中,用户帐户控制(UAC)确定用户的特权。 如果您是“内置管理员”组的成员,则会为您分配两个运行时访问令牌:标准用户访问令牌和管理员访问令牌。 默认情况下,您处于标准用户角色。 要执行访问安全日志的代码,必须首先将特权从标准用户提升为管理员。 您可以在启动应用程序时执行此操作,方法是右键单击该应用程序图标并指示您要以管理员身份运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM