我正在創建一個簡單的窗口服務,並且當我去調試時,出現錯誤「無法評估表達式,因爲原生框架位於調用頂部疊加。「。另外,當我在Release中構建服務並運行時,它只是掛起。無法評估表達式,因爲原生框架位於調用棧頂部
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyService1() };
ServiceBase.Run(ServicesToRun);
}
那一切是Program.cs文件,它通常被掛在ServiceBase.Run(ServicesToRun)線。
我一直能找到的所有東西都只涉及到表達式沒有被評估,因爲代碼被優化或者不得不處理asp.net和response.redirect。
服務代碼。
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);
}
內部空隙的run()加入只是最近在由二連Ersönmez的意見建議。他的想法對於幫助調試我的邏輯非常有幫助,直到我能夠找出其他問題。
我能夠進入本機調用堆棧,它位於一個位置,76F17094 ret。現在我不知道這是什麼,但也許別人會。
另外,當我啓動服務,並考慮將它附加到VS我注意到它的兩個實例。一個是正常的.exe,另一個是.vshost.exe。當我啓動其他服務時,我只能看到附件處理部分調試器中的.exe文件。這可能是因爲一個在v4 Framework(.vshost .exe服務)上,而另一個在v2(單一.exe服務)框架上?
我相信我得到了它的工作。這個問題似乎與我正在使用的計時器有關。我使用的原始計時器是一個System.Windows.Forms計時器。我將它切換到System.Timers.Timers並且所有事情都再次開始工作。仍然不能附加VS,但我仍然可以通過使用內部運行()方法進行調試。感謝所有幫助的N,N-
我放了一切,並執行命令,它的工作。但是,當我走出這個職能時,它不會讓我進一步前進。而當我去Debug-> Break All時,它正處於服務失敗的同一時刻。我想我在這裏做的不正確。 –
你看到了什麼樣的失敗?掛起或異常? –
就像我之前得到的「無法評估表達式......」一樣。服務是否會掛在ServiceBase.Run(ServicesToRun)部分。 –