gpt4 book ai didi

c# - EventLog WriteEntry not 不写入 C# 中的 EventViewer

转载 作者:行者123 更新时间:2023-12-05 01:20:47 32 4
gpt4 key购买 nike

我创建了一个 C# 应用程序,它在事件查看器中创建自定义日志名称,并将条目写入事件查看器。

我的应用程序在 Windows-7 操作系统机器上运行良好,但是当我将我的二进制文件复制到另一台 window-2012 服务器标准 (SP1) 机器上时,它无法运行。

我以管理员身份运行我的应用程序,我只看到自定义日志名称,但看不到日志消息。

我已在注册表事件日志条目中授予完全权限,但没有成功。有人可以建议我如何解决这个问题。或调试技术来解决此问题。

我已经调试了代码没有异常,代码运行流畅。我的代码很简单,如下所示:

EventLog.CreateEventSource("MyApp", "TestingApplication")
EventLog.WriteEntry("MyApp", "Testing 123")

今天我用相同的事件源和事件日志名称进行了测试,如下所示 EventLog.CreateEventSource("MyApp", "MyApp")它在 window-2012 服务器标准 (SP1) 中运行良好,在 Win-2012(SP1) 中是否存在任何问题,或者我遗漏了什么。

最佳答案

即使以管理员身份运行,在 Windows Server 2008 R2 中它也默认没有提升的权限。您需要提升权限才能创建源。创建源后,它应该允许您写入。

有几种方法可以解决这个问题,如果您正在构建一个实际的应用程序,您可以修改应用程序 list 以要求提升权限和管理员权限:

<?xml version="1.0" encoding="utf-8" ?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator"
uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>

或者,如果您正在构建一个普通的应用程序,您可以将创建事件源的代码拆分到一个单独的进程中。然后您可以检查事件源是否存在,如果存在,就使用它,如果不存在,您可以运行创建事件源的新进程。

Process 启动信息中,您需要 'runas' 动词。

如果您运行的是 Windows 服务,您会受到更多限制,因为据我所知,服务没有通过其 list 直接“提升”权限的能力。

但是,您的服务安装程序可以正常提升,并且应该在所需的管理员权限下运行,您可以在服务安装程序中创建事件源;然后在服务本身中使用它。

关于c# - EventLog WriteEntry not 不写入 C# 中的 EventViewer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26765385/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com