我正在使用SharePoint 2013网站,我有两种注册方式:( Win身份验证和FBA)
我正在尝试使用旧门户网站(SP 2010)中的解决方案(WSP),此WSP使用名为' Microsoft.Practices.EnterpriseLibrary.Data '的dll在SP 2013环境中不存在。
因此,要解决我从Microsoft安装 Microsoft Enterprise Library 5.0 ,然后我将此dll复制到inetpub \ wwwroot \ wss \ VirtualDirectories \ 80 \
现在,当我使用Windows身份验证模式登录网站时,WebPart会出现,但当以FBA用户身份登录时,会出现错误:
System.InvalidOperationException: Cannot open log for source 'Microsoft.Practices.EnterpriseLibrary.Data'. You may not have write access. ---> System.ComponentModel.Win32Exception: Access is denied
--- End of inner exception stack trace ---
at System.Diagnostics.EventLogInternal.OpenForWrite(String currentMachineName)
at System.Diagnostics.EventLogInternal.InternalWriteEvent(UInt32 eventID, UInt16 category, EventLogEntryType type, String[] strings, Byte[] rawData, String currentMachineName)
at System.Diagnostics.EventLogInternal.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type)
at ProjectName.Internet.EventViewerLogService.LogEvent(String source, String message, EventLogEntryType type)
at ProjectName.Internet.ExceptionHandler.Handle(Exception exception)
at ProjectName.Internet.SQLHelper.GetVolunteerInfo(String VolunteerId)
at ProjectName.Internet.Profiles.Volunteer.GetVolunteer(String VolunteerId)
at ProjectName.Internet.Accessibility.Accessibility.AccessibilityUserControl.Page_Load(Object sender, EventArgs e)
注意:我试图将“安全”权限授予注册表HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Eventlog \ Security到“Authenticated Users”组,因为我在开始时遇到错误 错误:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性。
PS:这是对此的跟进。我按照给出的答案但没有用。
我想这是由于服务器上的一些配置问题?
答案 0 :(得分:2)
该错误与权限问题有关,当我使用FBA用户登录时,我错过了写入新事件来源的权限。
默认情况下,任何经过身份验证的用户都可以写入应用程序事件日志。但是,只有管理员才能创建新的事件源。
我通过使用提升的权限运行CreateEventSource方法来解决它,如下所示:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
if (!EventLog.SourceExists(eSource))
{
EventLog.CreateEventSource(eSource, eLog);
}
EventLog.WriteEntry(eSource, ex.ToString(), EventLogEntryType.Error);
});