Estoy creando un servicio de ventana simple y cuando voy a depurar me aparece el error "No se puede evaluar la expresión porque un marco nativo está en la parte superior de la llamada apilar.". Además, cuando construyo el servicio en Release y lo ejecuto, simplemente cuelga.No se puede evaluar la expresión porque un marco nativo está en la parte superior de la pila de llamadas
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyService1() };
ServiceBase.Run(ServicesToRun);
}
Eso es todo lo que hay en el archivo Program.cs, donde normalmente se queda enganchada en la línea ServiceBase.Run (ServicesToRun).
Todo lo que he podido encontrar solo se relaciona con la expresión que no se evalúa porque el código está optimizado o tiene que tratar con asp.net y response.redirect.
Código del servicio.
public TruckRateClearService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
tmrProcess.Enabled = true;
}
protected override void OnCustomCommand(int command)
{
base.OnCustomCommand(command);
if (command == 129)
{
OnStart(null);
}
}
protected override void OnStop()
{
tmrProcess.Enabled = false;
}
private void tmrProcess_Tick(object sender, EventArgs e)
{
tmrProcess.Enabled = false;
try
{
eventLog.WriteEntry("Clearing Truck Rates Start" + DateTime.Now.ToString());
TruckRateClearingAgent.Process();
eventLog.WriteEntry("Clearing Truck Rates Finished" + DateTime.Now.ToString());
}
catch (Exception ex)
{
eventLog.WriteEntry(ex.ToString(), EventLogEntryType.Error);
}
tmrProcess.Enabled = true;
}
internal void Run()
{
tmrProcess_Tick(tmrProcess, null);
}
The Run vacío interno() se añadió simplemente reciente sobre la sugerencia en los comentarios de Eren Ersönmez. Su idea ha sido muy útil para ayudar a depurar mi lógica hasta que pueda descifrar el resto.
Pude entrar en la pila de llamadas nativas y se encuentra en una ubicación, 76F17094 ret. Ahora no tengo idea de qué es esto, pero tal vez alguien más lo haga.
Además, cuando inicio el servicio y busco adjuntarlo a VS, noto dos instancias de este. Uno es el .exe normal y otro es un .vshost.exe. Cuando inicio otros servicios, solo veo el archivo .exe en la sección Adjuntar para procesar parte del depurador. ¿Podría ser porque uno está en el Framework v4 (servicio .vshost .exe) y otro en el Framework v2 (servicio .exe único)?
Creo que lo tengo funcionando. Parece que el problema mintió con el temporizador que estaba usando. El temporizador original que estaba usando era un temporizador System.Windows.Forms. Lo cambié a System.Timers.Timers y todo comenzó a funcionar de nuevo. Todavía no puedo adjuntar VS a él, pero puedo depurarlo aún utilizando el método Internal Run(). Gracias por toda la ayuda N, N
Puse todo y ejecuté el comando y funcionó. Sin embargo, cuando salí de la función no me permitió avanzar más. Y cuando fui a Debug-> Break All, fue en el mismo punto en el que el servicio estaba fallando. Creo que estoy haciendo algo incorrecto aquí. –
¿Qué tipo de falla estás viendo? ¿Un cuelgue o una excepción? –
Lo mismo que antes "No puedo evaluar la expresión ...". Si el servicio se cuelga de la parte ServiceBase.Run (ServicesToRun). –