Tworzę prostą usługę okna i kiedy idę do debugowania, pojawia się błąd "Nie można ocenić wyrażenia, ponieważ natywna ramka jest nad wywołaniem stos.". Ponadto, gdy buduję usługę w wersji Release i uruchamiam, po prostu się zawiesza.Nie można ocenić wyrażenia, ponieważ natywna ramka znajduje się na wierzchu stosu wywołań
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyService1() };
ServiceBase.Run(ServicesToRun);
}
To wszystko, co jest w pliku Program.cs, gdzie normalnie dostaje wisiał na linii (ServicesToRun) ServiceBase.Run.
Wszystko, co udało mi się znaleźć, odnosi się tylko do wyrażenia nie podlegającego ocenie, ponieważ kod jest zoptymalizowany lub ma do czynienia z asp.net i response.redirect.
Kod usługi.
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);
}
Wewnętrzny Void Run() został dodany niedawno w sugestii w komentarzach Eren Ersönmez. Jego pomysł był bardzo pomocny w pomaganiu w debugowaniu mojej logiki, dopóki nie wymyślę reszty.
Udało mi się dostać do rodzimego stosu wywołań i znajduje się on w jednej lokalizacji, 76F17094 ret. Teraz nie mam pojęcia, co to jest, ale może ktoś inny.
Również po uruchomieniu usługi i rozważeniu dołączenia jej do VS zauważam dwa jej wystąpienia. Jednym z nich jest normalny .exe, a drugim jest plik .vshost.exe. Kiedy uruchamiam inne usługi, widzę tylko plik .exe w Załączniku, aby przetworzyć część debuggera. Czy to możliwe, ponieważ jeden znajduje się na platformie v4 (usługa .vshost .exe), a drugi na platformie v2 (pojedyncza usługa .exe)?
Wierzę, że to działa. Wygląda na to, że problem tkwił w zegarku, z którego korzystałem. Oryginalny czasomierz, którego używałem, to timer System.Windows.Forms. Przełączyłem go na System.Timers.Timers i wszystko zaczęło działać. Nadal nie mogę dołączyć VS do niego, ale mogę debugować go nadal za pomocą metody Internal Run(). Dzięki za wszelką pomoc N, N
Położyłem wszystko i wykonałem polecenie i zadziałało. Jednak, gdy wyszłam z funkcji, nie pozwoliłaby mi dalej posuwać się naprzód. A kiedy poszedłem do Debugowania -> Break All, było to w tym samym momencie, w którym usługa nie działała. Myślę, że robię coś niepoprawnego tutaj. –
Jakiego rodzaju niepowodzenia widzisz? Hang lub wyjątek? –
To samo co robiłem przed "Nie można ocenić wyrażenia ...". Czy usługa będzie po prostu zawieszona na części ServiceBase.Run (ServicesToRun). –