我正在创建一个简单的窗口服务,并且当我去调试时,出现错误“无法评估表达式,因为原生框架位于调用顶部叠加。“。另外,当我在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)部分。 –