Служба Windows выдает ошибку - System.Security.SecurityException - PullRequest
1 голос
/ 08 марта 2012

спасибо за чтение моего поста, я программирую службу Windows, и когда я пытаюсь ее запустить, я получаю эту ошибку в 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()

Вот код из моего Сервисного приложения (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();
            }
        }
        .
        .
        .
      }

Надеюсь, вы поможете мне решить эту проблему, заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 09 марта 2012

Я исправил это, похоже, ошибка была из-за того, что у меня было такое же имя логина из другого имени службы, которое я имел, я изменил его, и теперь оно кажется работающим (допустим, оно запускается)из другого блога, чтобы исправить ошибку и найти, что было не так

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

Это дало мне ошибку, в которой я нуждался

2 голосов
/ 05 июля 2016

Для меня это было исключение при доступе к журналу событий безопасности, когда после собственной статьи Microsoft https://msdn.microsoft.com/en-us/library/zt39148a%28v=vs.110%29.aspx к письму.

EventLog.SourceExists(eventLogSource) необходимо проверить в блоке try/catch.

2 голосов
/ 27 августа 2014

Я столкнулся с той же проблемой здесь, и обработка ошибок, предоставленная ricardorios, помогла мне выяснить причину моей проблемы.Я решил сделать пост, чтобы сэкономить время других людей.Вы можете столкнуться с этой ошибкой, если у вас есть пользовательское имя журнала, где первые 8 символов не являются уникальными.Это была ошибка, которую я получал:

Исключение: значимы только первые восемь символов пользовательского имени журнала, и в системе уже есть другой журнал, использующий первые восемь символов данного имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...