Ich erstelle einen einfachen Fensterdienst, und wenn ich zum Debugging gehe, bekomme ich den Fehler: "Ausdruck kann nicht ausgewertet werden, da ein nativer Rahmen über dem Aufruf steht Stapel.". Außerdem, wenn ich den Dienst in Release erstellen und ausführen, hängt es einfach.Ausdruck kann nicht ausgewertet werden, da ein nativer Rahmen über dem Aufrufstack liegt
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyService1() };
ServiceBase.Run(ServicesToRun);
}
Das ist alles, was in der Datei Program.cs ist, wo es wird normalerweise auf der ServiceBase.Run (ServicesToRun) Linie aufgehängt.
Alles, was ich finden konnte, bezieht sich nur auf den Ausdruck, der nicht ausgewertet wird, weil der Code optimiert ist oder mit asp.net und response.redirect umgehen muss.
Code für den Service.
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);
}
Der Internal Void Run() wurde gerade kürzlich auf den Vorschlag in den Kommentaren von Eren Ersönmez hinzugefügt. Seine Idee war sehr hilfreich beim Debuggen meiner Logik, bis ich den Rest herausfinden konnte.
Ich war in der Lage, die in den nativen Call-Stack zu bekommen und es sitzt an einem Ort, 76F17094 ret. Jetzt habe ich keine Ahnung, was das ist, aber vielleicht jemand anderes.
Auch, wenn ich den Dienst starten und schauen, wenn ich ihn an VS anhefte, bemerke ich zwei Instanzen davon. Eine ist die normale .exe und eine andere ist eine .vshost.exe. Wenn ich andere Dienste starte, sehe ich nur die .exe-Datei im Attach-to-Process-Teil des Debuggers. Könnte dies sein, weil einer auf dem v4-Framework (.vshost.exe-Dienst) und ein anderer auf dem v2-Framework (einzelner .exe-Dienst) ist?
Ich glaube, ich habe es funktioniert. Es scheint, dass das Problem mit dem Timer gelogen hat, den ich benutzte. Der ursprüngliche Timer, den ich verwendete, war ein System.Windows.Forms-Timer. Ich habe es auf System.Timers.Timers umgestellt und alles hat wieder angefangen zu arbeiten. Trotzdem kann ich VS nicht anhängen, aber ich kann es immer noch mit der internen Run() Methode debuggen. Vielen Dank für all die Hilfe n.n
Ich legte alles und führte den Befehl und es hat funktioniert. Als ich jedoch aus der Funktion heraustrat, würde ich mich nicht weiter bewegen. Und als ich zu Debug -> Break All ging, war es an dem Punkt, an dem der Service versagte. Ich denke, ich mache hier etwas falsch. –
Welche Art von Fehler sehen Sie? Ein Hang oder eine Ausnahme? –
Das selbe wie ich es zuvor bekommen habe "Ausdruck kann nicht ausgewertet werden ...". Würde der Dienst nur am ServiceBase.Run-Teil (ServicesToRun) hängen bleiben? –