간단한 윈도우 서비스를 만들고 디버깅 할 때 "네이티브 프레임이 호출의 최상위에 있기 때문에 표현식을 평가할 수 없습니다 스택.". 또한 Release에서 서비스를 빌드하고 실행하면 멈 춥니 다. 모든 그것이 일반적으로 ServiceBase.Run (ServicesToRun) 라인에 걸려 가져옵니다 Program.cs 파일에네이티브 프레임이 호출 스택 맨 위에 있기 때문에 표현식을 계산할 수 없습니다.
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyService1() };
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);
}
내부 무효 실행() 에렌 Ersönmez에 의한 의견의 제안에 단지 최근에 추가되었습니다. 그의 아이디어는 나머지를 파악할 수있을 때까지 내 논리를 디버그하는 데 매우 도움이되었습니다.
나는 네이티브 호출 스택에 들어갈 수 있었고 한 위치, 76F17094 ret에 앉아있었습니다. 이제는이게 뭔지는 모르겠지만 어쩌면 다른 사람이 알게 될 것입니다.
또한 서비스를 시작하고 VS에 첨부 할 때 두 인스턴스가 있음을 알게됩니다. 하나는 정상적인 .exe이고 다른 하나는 .vshost.exe입니다. 다른 서비스를 시작하면 디버거의 Attach to process 부분에서 .exe 파일 만 볼 수 있습니다. 하나는 v4 Framework (.vshost .exe 서비스)에 있고 다른 하나는 v2 (단일 .exe 서비스) Framework에 있기 때문일 수 있습니까?
나는 그것이 효과가 있다고 생각한다. 문제는 내가 사용하고 있던 타이머로 거짓말 한 것 같습니다. 원래 사용하던 타이머는 System.Windows.Forms 타이머였습니다. System.Timers.Timers로 바꿨고 모든 것이 다시 작동하기 시작했습니다. 여전히 VS를 첨부 할 수는 없지만 내부 Run() 메소드를 사용하여 디버깅 할 수 있습니다.
모든 것을 넣고 명령을 실행하면 효과가있었습니다. 그러나 내가 기능을 빠져 나왔을 때 더 이상 진전시키지 못했습니다. 그리고 Debug-> Break All에 갔을 때, 서비스가 실패한 동일한 지점에있었습니다. 나는 내가 여기서 잘못된 것을하고 있다고 생각한다. –
어떤 종류의 오류가 발생하고 있습니까? 정지 또는 예외? –
"표현식을 평가할 수 없습니다 ..."전에 얻은 것과 동일합니다. 서비스가 ServiceBase.Run (ServicesToRun) 부분에만 멈추었습니까? –