System.Security.SecurityException:未find源,但是部分或全部事件日志无法search。 无法访问的日志:安全

我试图创build一个Windows服务,但是当我尝试安装它,它回滚给我这个错误:

System.Security.SecurityException:未find源,但是部分或全部事件日志无法search。 无法访问的日志:安全。

我不知道这意味着什么 – 我的应用程序是最低限度的,因为我只是先testing一下。

我的安装员代码:

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(); } } 

如果系统提示您input用户名和密码,则某处设置为Account = ServiceAccount.User ,这是可能发生的唯一方法。 也许你上面的注释中的代码没有被执行,或者正在被稍后执行的代码改回。

至于你的第二段,一般来说,如果你不希望它在控制台上看到或作为一个任务运行,我认为一个服务可以罚款。 我不知道,如果我了解有关运行它作为ASP.NET的一部分,让它不允许你看到数据库…

最后,在最后一段中,如果不知道更多关于安装程序代码中发生了什么的事情,我无法与NullExeception交谈。

在Windows 7中使用installutil时,尝试从命令行安装服务时遇到了相同的exception。解决方法是以pipe理员身份打开命令行,然后运行installutil。

另外你可能会发现使用像TopShelf这样的框架容易托pipe你的服务,因为它pipe理着从服务名称和描述到恢复过程如何工作的所有安assembly置 。 它还允许在debugging时从IDE内部轻松启动服务。

以pipe理员身份运行命令提示符。 它会解决你的问题

以pipe理员身份运行

这是程序员错过的一个非常普遍的问题

我通过打开具有pipe理权限的VS2013开发人员控制台解决了同样的问题。

您可能正尝试使用安装服务

  1. 没有足够权限的用户帐户
  2. 具有pipe理员权限的用户,但未以“pipe理员模式”运行命令提示符。

具体来说,这种情况下的问题是在服务安装期间创build一些EventLogregistry项。

解决此问题的一种方法是确保您以pipe理员模式运行命令提示符。 (右键单击>以pipe理员身份运行)

我还遇到了一些情况下,由于某些registry项对pipe理员帐户没有“完全控制”权限,此方法仍然无法解决SecurityException问题。

以下键应该为pipe理员设置“完全控制”,以使服务能够写入到事件日志中:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \ Application

这可以通过以下方式完成:

  1. 调用Windowsregistry编辑器
    • 运行[Win + R]
    • 键入“regedit”
  2. 浏览列出的path
  3. 右键点击所需的path
  4. 确保pipe理员勾选了“ 读取”和“ 完全控制”权限checkbox
  5. 单击应用确定
  6. 对另一个path重复相同的过程