Cod*_*nis 9 asp.net-mvc iis-6 securityexception event-log
我有一个我用一些业务逻辑创建的库,包括写一个System.Diagnostics.EventLog实例.该库通常从Windows服务应用程序调用,但现在我正在尝试从我的ASP.NET MVC应用程序调用这些相同的库函数.
我在我的控制器中尝试了这个代码来创建我传递给需要写入日志的方法的EventLog实例.
Dim log = New EventLog("Application", My.Computer.Name, "MyMVCApp")
Run Code Online (Sandbox Code Playgroud)
当库方法中的代码尝试写入日志时,会生成以下错误:
[SecurityException: Requested registry access is not allowed.]
System.ThrowHelper.ThrowSecurityException(ExceptionResource resource) +51
Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) +7462217
System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData) +366
System.Diagnostics.EventLog.VerifyAndCreateSource(String sourceName, String currentMachineName) +194
System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData) +205
System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type) +14
Run Code Online (Sandbox Code Playgroud)
我的Web应用程序在运行IIS 6的Windows Server 2003上作为网络服务用户运行.为了使网络服务用户能够访问注册表,我需要做些什么吗?
有没有更好的方法来创建一个用于ASP.NET MVC应用程序的EventLog实例?是否已经由我需要引用的框架创建了一个?
UpT*_*eek 19
来自MSDN:"使用网络服务标识运行的应用程序可以使用现有事件源写入事件日志,但由于注册表权限不足,它们无法创建新的事件源."
和...
" 如果与EventLog实例关联的事件日志的Source 不存在,则会创建一个新的事件源. "
因此看起来您的事件日志源不存在,并且它正在尝试使用网络服务用户创建新的事件日志源(这需要写入注册表,因此无法工作).
"要使ASP.NET应用程序使用尚不存在的事件源写入事件日志,您有两种选择:
因此,需要在应用程序之外创建日志(您无法以此用户编程方式执行此操作.手动执行此操作,或创建简单的命令行应用程序以简化安装).
有关详细信息:
http://msdn.microsoft.com/en-us/library/ms998320.aspx#paght000015_eventlogaccess
我个人建议你不要改变净用户权限,而是在Web应用程序之外创建日志源.我的偏好是在一个控制台应用程序中(这将花费你大约5分钟来编写,你也可以用来准备其他机器).在VS.NET中启动一个新的控制台应用程序,并添加代码以创建日志源.一个例子:
http://www.dotnetspider.com/resources/23593-Create-Event-log-VB-NET.aspx
然后使用适当的权限登录时,从cmd行运行控制台应用程序.
如果你不确定它试图创建什么事件源,那么上面接受的答案将很难理解.
一个更简单的解决方案是将应用程序池切换为临时使用LocalSystem,然后运行应用程序并产生错误.它将能够创建相关的事件日志源,之后您可以将其切换回使用NetworkService.
| 归档时间: |
|
| 查看次数: |
8935 次 |
| 最近记录: |