1

我有一个小型 winforms 应用程序,可以创建一个新的事件日志源。

以管理员身份运行它以获得提升的权限。

代码检查以确保指定的事件日志不存在,然后创建源。这在我的 Windows 7 机器上运行良好,但是当我在 Windows Server 2008 R2 SP1 上运行该应用程序时,它告诉我源已经存在。我知道这不是因为 a) 这是全新安装的 Windows Server 2008 R2,并且 b) 我添加了代码以返回所有日志源的列表,而我的新日志源不在列表中。

我知道“前 8 个字符”是重要的字符,并且我确保我的源名称是完全唯一的。

这是超级简单的代码(当然我对此有尝试/捕捉):

if (!EventLog.SourceExists(sourceName))
{
    EventLog.CreateEventSource(sourceName, logName);
}

谁能告诉我为什么 Windows Server 2008 对我撒谎?

4

1 回答 1

0

本地(或域)管理员不是Windows 机器上最强大的帐户。

还有其他帐户具有更高(尽管也更受限制)的访问权限。

SourceExists()如果它退出但您没有访问权限来了解它,将返回 false,并且管理员完全有可能被拒绝访问某些内容。

此外,在奇怪的地方有一些保留的名称可能会让你绊倒。创建名称为 CON COM 或 LPT 的文件夹会导致服务器 2003 上出现奇怪的问题。

因此,CreateEventSource() 可能失败的原因也有很多——也深入研究内部异常,通常这些异常提供了关键细节。

哪个事件日志源名称对您来说失败了?
你会发布异常堆栈吗?

于 2011-10-10T06:01:44.597 回答