我正在努力尝试将ASP.NET应用程序从Server 2003(和IIS6)移植到Server 2008(IIS7).
当我尝试访问浏览器上的页面时,我得到了这个:
'/'应用程序中的服务器错误.
安全例外
说明:应用程序尝试执行安全策略不允许的操作.要授予此应用程序所需的权限,请与您的系统管理员联系或在配置文件中更改应用程序的信任级别.
异常详细信息:System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志.无法访问的日志:安全性
来源错误:
在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.
堆栈跟踪:
[SecurityException:找不到源,但无法搜索部分或全部事件日志.无法访问的日志:安全.]
System.Diagnostics.EventLog.FindSourceRegistration(String source,String machineName,Boolean readOnly)+562 System.Diagnostics.EventLog.SourceExists(String source,String machineName)+251
[剪断]
这些是我为尝试解决它而做的事情:
授予"Everyone"对密钥的完全访问权限HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security.这很有效.但我自然不能在生产中这样做.所以我在运行应用程序几分钟后删除了"Everyone"权限,错误重新出现.
我在应用程序日志和安全日志中创建了源代码(我通过regedit对其进行了验证)在安装期间使用提升的权限,但错误仍然存在.
我在应用程序中给了应用程序一个完整的信任级别web.config(并使用appcmd.exe),但无济于事.
有没有人能够了解这里可以做些什么?
PS:这是对这个问题的跟进.我按照给出的答案但没有用(见上面的#2).
我正在创建一个ASP.NET应用程序,它将一些东西记录到Windows EventLog.要执行此操作,必须首先创建事件源.这需要管理权限,所以我无法在ASP.NET应用程序中执行此操作.
是否存在与Windows捆绑在一起的可以创建事件日志源的现有命令行应用程序,还是我必须自行推出?
有没有办法写入此事件日志:

或者至少,一些其他Windows默认日志,我不必注册事件源?
我收到以下异常.我在Registry编辑的Eventlogs上完全控制了Asp.net帐户.
[SecurityException:找不到源,但无法搜索部分或全部事件日志.无法访问的日志:安全.]
Run Code Online (Sandbox Code Playgroud)System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly, Boolean wantToCreate) +664 System.Diagnostics.EventLog.SourceExists(String source, String machineName, Boolean wantToCreate) +109 System.Diagnostics.EventLog.SourceExists(String source) +14 Microsoft.ApplicationBlocks.ExceptionManagement.DefaultPublisher.VerifyValidSource() +41
我想这是由于服务器上的一些配置问题?
我正在尝试创建一个Windows服务,但是当我尝试安装它时,它会回滚给我这个错误:
System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志.无法访问的日志:安全性.
我不知道这意味着什么 - 我的应用程序有最低限度,因为我只是先测试一下.
我的安装员代码:
namespace WindowsService1
{
[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
public ProjectInstaller()
{
//set the privileges
processInstaller.Account = ServiceAccount.LocalSystem;
processInstaller.Username = null;
processInstaller.Password = null;
serviceInstaller.DisplayName = "My Service";
serviceInstaller.StartType = ServiceStartMode.Manual;
//must be the same as what was set in Program's constructor
serviceInstaller.ServiceName = "My Service";
this.Installers.Add(processInstaller);
this.Installers.Add(serviceInstaller);
}
private void serviceProcessInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
}
private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的服务代码:
public partial class Service1 …Run Code Online (Sandbox Code Playgroud) 我收到错误:
找不到源,但无法搜索部分或全部事件日志.无法访问的日志:安全性
当我在代码下运行以捕获Win 2K12 R2服务器IIS 8.5上的错误时
EventLog elog = new EventLog();
EventLog.CreateEventSource("MyApp", "Application");
EventLog.WriteEntry(Source, swError.ToString(), EventLogEntryType.Error);
Run Code Online (Sandbox Code Playgroud)
我已经完全访问HKLM\SYSTEM\CurrentControlSet\services\eventlog但它仍然没有工作.我该怎么做才能修好它?
我正在为使用自定义事件日志源的网站创建安装程序.我希望我们的基于WiX的安装程序在安装期间创建该事件日志源.
有没有人知道使用WiX框架执行此操作的最佳方法.
我正在尝试用我的c#代码写入事件查看器,但我得到了很棒的"对象引用没有设置为对象的实例"消息.我很感激这些代码的一些帮助,无论是它的错误还是更好的方法.这是我写入事件日志的内容:
private void WriteToEventLog(string message)
{
string cs = "QualityDocHandler";
EventLog elog = new EventLog();
if (!EventLog.SourceExists(cs))
{
EventLog.CreateEventSource(cs, cs);
}
elog.Source = cs;
elog.EnableRaisingEvents = true;
elog.WriteEntry(message);
}
Run Code Online (Sandbox Code Playgroud)
这就是我试图称之为的地方:
private readonly Random _rng = new Random();
private const string _chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private string RandomString(int size)
{
try
{
char[] buffer = new char[size];
for (int i = 0; i < size; i++)
{
buffer[i] = _chars[_rng.Next(_chars.Length)];
}
return new string(buffer);
}
catch (Exception e)
{
WriteToEventLog(e.ToString());
return null; …Run Code Online (Sandbox Code Playgroud) 当我将日志写入Windows事件日志时,我得到下面的事件,这条消息的根本原因是什么,我该如何解决?非常感谢
无法找到源RRWS的事件ID 51001的描述.引发此事件的组件未安装在本地计算机上,或者安装已损坏.您可以在本地计算机上安装或修复该组件.
如果事件源自另一台计算机,则必须随事件一起保存显示信息.
活动中包含以下信息:
测试日志消息
消息资源存在但在字符串/消息表中找不到该消息
我有一个应用程序创建了许多自定义事件日志源来帮助过滤其输出.如何在不编写任何代码的情况下从机器中删除自定义源代码,因为使用System.Diagnostics.EventLog.Delete运行快速程序是不可能的.
我已经尝试使用RegEdit从[HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services\Eventlog]中删除自定义源,但是应用程序的行为就好像日志仍然存在于幕后.
我还缺少什么?