Reputation: 376
thanks for reading my post i am programming a Windows Service, and when i try to start it i get this error on the EventViewer:
Application: SerivicioBIOHAcademico.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Security.SecurityException
Stack:
at System.Diagnostics.EventLog.FindSourceRegistration(System.String, System.String, Boolean, Boolean)
at System.Diagnostics.EventLog.SourceExists(System.String, System.String, Boolean)
at System.Diagnostics.EventLog.SourceExists(System.String)
at SerivicioBIOHAcademico.BIOHAcad..ctor()
at SerivicioBIOHAcademico.Program.Main()
Here is some code from my Service App (C#)
public partial class BIOHAcad : ServiceBase
{
Timer timer1 = new Timer();
private readonly string WDcon = ConfigurationManager.ConnectionStrings["WindowsFormsApplication2.Properties.Settings.DBGriauleConnectionString"].ConnectionString;
private readonly string UJGH = ConfigurationManager.ConnectionStrings["HorariosConnection"].ConnectionString;
public BIOHAcad()
{
InitializeComponent();
if (!System.Diagnostics.EventLog.SourceExists("Fuentes-BIO-H-Academico"))
{
System.Diagnostics.EventLog.CreateEventSource(
"Fuentes-BIO-H-Academico", "Logs-BIO-H-Academico");
}
eventLog1.Source = "Fuentes-BIO-H-Academico";
eventLog1.Log = "Logs-BIO-H-Academico";
}
protected override void OnStart(string[] args)
{
try
{
eventLog1.WriteEntry("Iniciando Servicio BIO-H Academico");
timer1.Elapsed += new ElapsedEventHandler(timer1_Elapsed);
timer1.Interval = 1000;
timer1.Enabled = true;
timer1.Start();
}
catch (Exception e)
{
eventLog1.WriteEntry(e.ToString());
}
}
private void timer1_Elapsed(object sender, EventArgs e)
{
try
{
Buscar_Horarios(DateTime.Now);
}
catch (Exception ex)
{
eventLog1.WriteEntry(ex.ToString());
}
}
private void Buscar_Horarios(DateTime fecha)
{
bool conectarse = Conectarse_BD();
if (conectarse == true)
{
DateTime corte = fecha.AddMinutes(((-1) * Holgura_Academica()));
string dia = Funciones.ObtenerDiaSemana2(fecha);
string hora = Funciones.ObtenerHora(fecha);
string cortedia = Funciones.ObtenerHora(corte);
//Llamo la conexion SQL
SqlConnection Wdcon_usuario = new SqlConnection(UJGH);
SqlCommand usuario = new SqlCommand();
SqlDataReader usuarioDR = null;
//Instancio la conexion SQL
usuario.Connection = Wdcon_usuario;
//Registro el Query SQL
usuario.CommandText = "SELECT * FROM Vista_Horarios_Docentes WHERE (HRAFIN = @horafin) AND (HRADIA = @dia)";
usuario.Parameters.AddWithValue("@horafin", hora);
usuario.Parameters.AddWithValue("@dia", cortedia);
//Abro la conexion
Wdcon_usuario.Open();
//Ejecuto la consulta
usuarioDR = usuario.ExecuteReader();
//Empiezo el ciclo
while (usuarioDR.Read())
{
if (usuarioDR["HRARES"].ToString() != "")
{
if (Validar_Docente(Convert.ToInt64(usuarioDR["HRARES"].ToString())) == true)
{
DateTime inicio1 = (DateTime)usuarioDR["HRAINI"];
DateTime fecha2 = inicio1.AddMinutes((-1) * Holgura_Academica());
string inicio = Funciones.ObtenerHora(fecha2);
Int64 docente = Convert.ToInt64(usuarioDR["HRARES"].ToString());
if (SalioCorrectamente(docente, inicio, cortedia) == true)
{
//Calculo las horas que dio clases
CalcularHoras(docente, inicio, cortedia);
}
else
{
//Denegar la persona
Insertar_Denegado(docente, DateTime.Now, Convert.ToDateTime(inicio), Convert.ToDateTime(cortedia));
}
}
}
}
//Cierro la conexion
Wdcon_usuario.Close();
}
}
.
.
.
}
Hope you can help me to solve this, thanks in advance.
Upvotes: 2
Views: 14090
Reputation: 109
One exception I had was that the custom log name was too long and so I appended a character to make it exists, only to find out and it only accepts the first eight characters.
So for example, AAAAAAAA is equivalent to AAAAAAAABBB and that throws an error. So the solution is just to rename it to something else unique.
The exception was: Only the first eight characters of a custom log name are significant, and there is already another log on the system using the first eight characters of the name given. Name given 'AAAAAAAABBB', name of existing log: 'AAAAAAAA'.
Upvotes: 0
Reputation: 3500
In my case I made sure my service runs as Local System then it worked fine.
Upvotes: 0
Reputation: 2784
For me it was the exception accessing Security event log when following Microsoft's own article https://msdn.microsoft.com/en-us/library/zt39148a%28v=vs.110%29.aspx to the letter.
EventLog.SourceExists(eventLogSource)
needs to be checked in a try/catch
block.
Upvotes: 3
Reputation: 71
I ran into the same issue here and the error handling provided by ricardorios helped me figure out the cause of my issue. I figured I would make a post to save other people time. You can run into this error if you have a custom log name where the first 8 characters are not unique. This was the error that I was receiving:
Exception: Only the first eight characters of a custom log name are significant, and there is already another log on the system using the first eight characters of the name given.
Upvotes: 2
Reputation: 376
I fixed it, it seems the error was because i had the same logname from another service name i had, i changed it and now it seems working (let´s say it starts)
I used this from another blog to solve the error and find what was wrong
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Diagnostics;
namespace SerivicioBIOHAcademico
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
try
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new BIOHAcad()
};
ServiceBase.Run(ServicesToRun);
}
catch(Exception ex)
{
string SourceName = "WindowsService.ExceptionLog";
if (!EventLog.SourceExists(SourceName))
{
EventLog.CreateEventSource(SourceName, "Application");
}
EventLog eventLog = new EventLog();
eventLog.Source = SourceName;
string message = string.Format("Exception: {0} \n\nStack: {1}", ex.Message, ex.StackTrace);
eventLog.WriteEntry(message, EventLogEntryType.Error);
}
}
}
}
It gave me the error i needed
Upvotes: 6