【问题标题】:"Cannot open log for source" - Windows 7 - .NET web service - event log“无法打开源日志” - Windows 7 - .NET Web 服务 - 事件日志
【发布时间】:2011-03-20 07:32:38
【问题描述】:

我有一个 .NET Web 服务正在尝试记录到 Windows 事件日志。但是,当我尝试向此 Web 服务中的 Web 方法发送 SOAP 请求时,我在 SOAP 响应中返回此错误:

System.InvalidOperationException:无法打开源“MySource”的日志。您可能没有写入权限。 ---> System.ComponentModel.Win32Exception: 访问被拒绝

我已经尝试在谷歌上搜索解决方案。 This one 描述了在 Windows 7 64 位中编辑对我来说不存在的注册表项; this Microsoft page 相同。 This question 是相关的,但它的唯一答案是在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\eventlog\MySource 中似乎没有任何地方的“源”键。如果我需要添加 Source 键,它的值需要是什么?我在我的 Web 服务的 Web.config (<identity impersonate="true" />) 中使用模拟。 This question 也是相关的,但没有答案。 This question 是相关的,但它的答案似乎与 Windows 7 中的注册表设置无关。

我的 Web.config 中同时设置了 <authentication mode="Windows" /> 和 <identity impersonate="true" />。但是,即使我删除了<authentication mode="Windows" />,我仍然会收到“无法打开源日志”错误。

【问题讨论】:

    标签: .net web-services permissions impersonation event-log


    【解决方案1】:

    看这里:

    http://msdn.microsoft.com/en-us/library/x7y6sy21.aspx

    注意

    要在 Windows Vista、Windows XP Professional 或 Windows Server 2003 中创建事件源,您必须具有管理权限。

    此要求的原因是必须搜索所有事件日志,包括安全性,以确定事件源是否唯一。在 Windows Vista 中,用户无权访问安全日志;因此,会引发 SecurityException。 在 Windows Vista 中,用户帐户控制 (UAC) 确定用户的权限。如果您是 Built-in Administrators 组的成员,则会为您分配两个运行时访问令牌:一个标准用户访问令牌和一个管理员访问令牌。默认情况下,您是标准用户角色。要执行访问安全日志的代码,您必须首先将您的权限从标准用户提升为管理员。您可以在启动应用程序时执行此操作,方法是右键单击应用程序图标并指示您要以管理员身份运行。


    解决方案:您应该使用以管理员身份运行的安装程序或实用程序来设置日志源。如果您不确定,只需使用您在 Web 服务中使用的相同代码来记录“安装实用程序已完成”消息。

    (您应该不以管理员权限运行 Web 服务)

    希望有帮助!

    【讨论】:

    • 我认为这不是问题所在。源代码已经存在于我的计算机上,因此我的代码不会尝试创建新的源代码,它只是尝试写入现有的源代码。
    • 你能发布你的代码,以及异常的堆栈跟踪吗?
    【解决方案2】:

    对于我的经典 ASP Web 应用程序,我在 Windows 7 64 位中遇到了完全相同的问题。我最终发现,通过将该网站的应用程序池更改为“启用 32 位应用程序”(右键单击应用程序池,高级设置),问题就消失了。

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2014-05-04
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多