System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性
Posted
技术标签:
【中文标题】System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性【英文标题】:System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security 【发布时间】:2011-08-14 21:43:09 【问题描述】:我正在尝试创建一个 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)
我的服务代码:
public partial class Service1 : ServiceBase
public Service1()
this.ServiceName = "My Service";
protected override void OnStart(string[] args)
base.OnStart(args);
protected override void OnStop()
base.OnStop();
【问题讨论】:
“我将 Account 和 Password 都设置为 null,Account 设置为 Local System。” - 你是如何将同一个属性设置为两个不同的东西的……?跨度> ` processInstaller.Account = ServiceAccount.LocalSystem; processInstaller.Username = null; processInstaller.Password = null; ` sry 我没注意到我说了两次帐户:/ 如果您发布了一些代码,我们或许可以为您提供帮助。 尝试以管理员权限运行“installUtil”命令。 【参考方案1】:在 Windows 7 中使用 installutil 时尝试从命令行安装服务时遇到了同样的异常。解决方案是以管理员身份打开命令行,然后运行 installutil。
此外,您可能会发现使用TopShelf 之类的框架来托管您的服务更容易,因为它可以管理从服务名称和描述到恢复过程如何工作的所有setup configuration。它还允许您在调试时从 IDE 内部轻松启动服务。
【讨论】:
这是对我的修复。干杯。 不敢相信它发生在我身上。又来了! 理想情况下,这应该设置为答案! :) 这是我的问题。一项服务很好,但安装第二项服务失败。 谢谢。这解决了我的问题【参考方案2】:以管理员身份运行命令提示符。 它会解决你的问题
【讨论】:
这对我有用。即使我的帐户在管理员组中【参考方案3】:以管理员身份运行
这是程序员经常忽略的一个非常普遍的问题
【讨论】:
我浪费了 2 个小时。谢谢!【参考方案4】:您可能正在尝试使用
安装服务-
没有足够权限的用户帐户
或者
具有管理员权限但未在“管理员模式”下运行命令提示符的用户。
具体来说,这种情况下的问题是在服务安装期间创建了一些 EventLog 注册表项。
解决此问题的一种方法是确保您在管理员模式下运行命令提示符。 (右键单击 > 以管理员身份运行)
我也遇到过一些情况,由于某些注册表项对管理员帐户没有“完全控制”权限,这种方法仍然无法解决 SecurityException 问题。
以下键应为管理员设置“完全控制”,以便服务能够写入事件日志:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application
这可以通过以下方式完成:
-
调用 Windows 注册表编辑器
运行 [Win + R]
键入“注册表编辑器”
好的
导航到上面列出的路径
右键单击所需路径
确保读取和完全控制权限复选框都为管理员打勾
点击应用和确定
对另一条路径重复相同的过程
【讨论】:
【参考方案5】:我通过使用管理权限打开 VS2013 开发者控制台解决了同样的问题。
【讨论】:
【参考方案6】:如果系统提示您输入用户名和密码,那么某处的某处设置为 Account = ServiceAccount.User
- 这是可能(应该)发生的唯一方式。也许您在上面注释中的代码没有被执行,或者它正在被稍后执行的代码改回来。
就您的第二段而言,一般来说,如果您不希望它在控制台上显示或作为任务运行,我认为服务会很好。我不确定我是否理解将其作为 ASP.NET 运行并且不允许您查看数据库的部分...
最后,在您的最后一段中,如果不了解您的安装程序代码中发生的事情,我无法与 NullExeception 交谈。
【讨论】:
至于第二段,我有很多代码正在处理,正如我所提到的,它提取 RSS 提要、收集数据、解析它并将其存储到数据库中。我有一个 ASP.NET Web 应用程序,因为我为用户提供了一个界面,以便他/她可以看到基于我数据库中的数据的建议。如果有更好的方法可以让我在 ASP.NET 中使用后台进程,我会很乐意选择..有没有办法? @michelle,尝试删除设置Account
、Username
和Password
的三行代码。我猜测这是在安装程序查看属性并看到默认的ServiceAccount.User
之后被调用的,然后要求提供凭据,然后用空值覆盖它。尝试在属性页上设置它。只是在黑暗中刺伤。
@michelle,就您评论的另一部分而言,您提到了在“ASP.NET 中运行后台进程”。抱歉,这超出了我的专业范围。 如果您尝试做的事情可以完成,它可能需要AJAX。 AJAX 提供了更丰富的 Web UI 体验(例如,Google Maps 使用 AJAX,可能与您在结果中键入内容时出现的 Google 搜索一样)。您可能会更幸运地开始一个专门标记为那个的新问题。【参考方案7】:
我在尝试测试是否存在 EventLog 时遇到此错误(在 OP 中)
if (!EventLog.SourceExists("applicatioName"))
EventLog.CreateEventSource("applicatioName", "Application");
以管理员身份运行 VisualStudio 解决了该问题。
【讨论】:
以上是关于System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性的主要内容,如果未能解决你的问题,请参考以下文章