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开发人员控制台解决了同样的问题。
您可能正尝试使用安装服务
- 没有足够权限的用户帐户
- 具有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
这可以通过以下方式完成:
- 调用Windowsregistry编辑器
- 运行[Win + R]
- 键入“regedit”
- 好
- 浏览列出的path
- 右键点击所需的path
- 确保pipe理员勾选了“ 读取”和“ 完全控制”权限checkbox
- 单击应用并确定
- 对另一个path重复相同的过程