Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 事件日志写入权限_C#_.net_Service_Windows Services_Event Log - Fatal编程技术网

C# 事件日志写入权限

C# 事件日志写入权限,c#,.net,service,windows-services,event-log,C#,.net,Service,Windows Services,Event Log,我的问题与对Windows事件日志的写入权限有关。 我查阅了几篇关于这一点的帖子,并找到了一些解决问题的方法,但这些都不适合我目前的情况 我在.NET4.0中使用C#。我使用EventLog类: 简言之,我需要查看是否有一种方法可以模拟或使用经过身份验证的用户和密码进行身份验证,以获得写入事件日志所需的权限。服务器将始终位于Windows server系列中,但版本可能会有所不同 我的应用程序是使用以下帐户之一运行的Windows服务: 网络服务 当地服务 本地系统 具有受限权限的用户(用户

我的问题与对Windows事件日志的写入权限有关。 我查阅了几篇关于这一点的帖子,并找到了一些解决问题的方法,但这些都不适合我目前的情况

我在.NET4.0中使用C#。我使用EventLog类:

简言之,我需要查看是否有一种方法可以模拟或使用经过身份验证的用户和密码进行身份验证,以获得写入事件日志所需的权限。服务器将始终位于Windows server系列中,但版本可能会有所不同

我的应用程序是使用以下帐户之一运行的Windows服务:

  • 网络服务
  • 当地服务
  • 本地系统
  • 具有受限权限的用户(用户或 域用户组)
以下是我的一些其他标准:

  • 我无法将服务用户设置为管理员,甚至无法将本地管理员设置为服务器上的管理员
  • 我无法编辑或更改注册表
  • 我无法更改服务器上的UAC或任何组策略
  • 我有一个具有管理员权限的用户,但它不能用于运行服务
  • 事件日志将始终是本地事件日志,而不是远程计算机上的事件日志
  • 日志可能总是“应用程序”日志
  • 来源可能不同,这似乎是问题的核心所在
我的问题是:这可能吗?

我可以在代码中模拟用户来实现我所需要的功能吗? 我在连接到web服务、登录到smtp服务器以及当然登录到数据库等时都会这样做

我偶然上了这门课:

但是,我似乎对如何使用这门课没有一个好的概念


我希望我已经很好地表达了我的问题。由于我的标准,我不认为这是另一篇文章的副本。

默认情况下,任何经过身份验证的用户都可以写入应用程序事件日志。但是,只有管理员才能创建新的事件源。如果在服务安装时知道所有事件源,我建议提前注册这些源,这样您就可以完成所有设置。注册是一个简单的呼叫

如果您需要在事件源方面具有更大的灵活性,可以自定义权限。可以通过调整注册表项自定义这些默认值:

  HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\Application\CustomSD
本节中描述的过程。作为操作系统的一部分,Server2008及更高版本上提供了一个
wevtutil
工具,这比使用regedit要简单一些。

答案显示为“否”

我意识到没有一个好办法可以按照我的要求解决这个问题。必须有一个手动工作完成

因此,我为这个场景选择的解决方案是,不能以管理员身份运行服务或手动编辑注册表的客户不能使用记录到事件日志的功能。我将允许从配置中启用和禁用日志记录


管理员用户和注册表编辑对我来说是众所周知的方式,但如上所述,这是我试图避免的。但是,根据我这次的标准,这似乎是不可能的。

这里的关键是安装时的管理员级权限,如果您想在默认/安全安全设置下操作,这是必需的。我知道这一点,我通常都会这么做。但两者都违反了我的标准(如问题中所述)。我无法编辑或更改注册表。而且我不能提前注册源代码,因为我的源代码可能会有所不同。@MatsMagnem,我很确定您可以在服务安装时编辑注册表。安装windows服务时,无论如何都需要管理权限,因此可以在安装时调整权限。一旦完成,并且您的服务正在运行,您就不需要修改注册表。当然,我可以。如果有必要,我会的。但是,这是一款销售用于安装在cutsomer自己的环境中的产品。由于政策和政治原因,大多数政府和企业客户通常不会给我一个具有管理权限的用户。安装本身不需要管理员权限,解决方案的所有运行也不需要管理员权限。所以这不是我的选择。如果必须的话,我会的。但是,如果我可以通过模拟用户来避免它(这是可以的,因为他们可以在insall之后设置用户名和密码),那就太棒了:-)@MatsMagnem,
安装本身不需要管理员权限
——这不是真的,要安装windows服务,您必须是计算机上的管理员。为什么投反对票?这是一个完全正确的问题。许多需要特殊权限或管理权限的功能可以从代码中模拟出来,这样服务本身就可以作为低权限用户运行。虽然它不满足您的所有要求,但它的可能重复,而且它的答案通常更有用,依我看。-1:在安装过程中,从代码使用中修改注册表。其他建议描述了手动编辑,没有回答我的具体问题。它们是可供选择的方法,而不是我要求的。如前所述,您可以编写一个安装程序组件,以便在安装您的服务时,它也会自动添加一个事件源(并在卸载时将其删除)。您承认安装必须以具有管理员权限的用户身份完成,因此显然有一个解决方案,因此对“答案”进行否决投票。@Peter有趣的方法,您应该将其作为答案发布。