Ne peut pas évaluer l'expression, car un natif image est sur le dessus de la pile des appels
Je suis la création d'un simple service de fenêtre et quand je vais pour déboguer j'ai l'erreur "Impossible d'évaluer l'expression parce qu'un natif image est sur le dessus de la pile d'appel.". Aussi, lorsque je construis le service de presse et d'exécuter se bloque.
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyService1() };
ServiceBase.Run(ServicesToRun);
}
C'est tout ce qui est dans le Programme.cs fichier, où il est généralement accroché sur le ServiceBase.Exécuter(ServicesToRun).
Tout ce que j'ai pu trouver se rapporte uniquement à l'expression n'étant pas évalué parce que le code est optimisé ou d'avoir à traiter avec asp.net et la réponse.rediriger.
Code pour le 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);
}
Interne Void Run() a été ajouté récents sur la suggestion dans les commentaires par Eren Ersönmez. Son idée a été très utile pour aider à déboguer ma logique, jusqu'à ce que je peux comprendre le reste.
J'ai été en mesure d'obtenir les dans l'appel des Indigènes de la pile et il est assis sur un emplacement, 76F17094 ret. Maintenant, je n'ai aucune idée de ce que c'est, mais peut-être quelqu'un d'autre le fera.
Aussi, lorsque je démarre le service et de regarder en l'attachant à VS je m'aperçois deux instances. L'une est la normale .exe et en est un autre .vshost.exe. Quand j'ai commencer à d'autres services, je ne vois que de la .exe fichier dans l'Attacher au processus partie du débogueur. Serait-ce parce que l'on est sur la v4 Cadre .vshost .exe de service ) et un autre sur la v2 ( single .exe service ) Cadre?
Je crois que je l'ai eu à travailler. Il semble que le problème a menti à la minuterie, j'ai été à l'aide. L'original de la minuterie j'ai été en utilisant un Système.De Windows.Les formes de la minuterie. Je l'ai mis au Système de.Les minuteries.Minuteries et tout a commencé à travailler à nouveau. Encore cant VS joindre à elle, mais je peux le corriger encore en utilisant le méthode Run (). Merci pour toute l'aide n.n
OriginalL'auteur Tim B | 2012-06-01
Vous devez vous connecter pour publier un commentaire.
Votre principal problème est que vous essayez d'exécuter directement un service windows exe. Les services de Windows peut uniquement être démarré via le Gestionnaire de Contrôle des Services (SCM). Afin d'être en mesure de débogage dans le VS, je vous recommande de quelque chose comme ceci:
Vous devez créer un
MyService1.Run
méthode qui génère un nouveau thread qui exécute le service de la boucle. Aussi, vous pourriez dire la mêmeRun
méthode à partir de laMyService1.Onstart
.Ce régime fonctionne comme un service lorsqu'on a commencé par le SCM, mais le traite comme un simple fichier exe lorsqu'en cours de débogage dans VS (ou en cours d'exécution directement comme un exe en dehors de VS).
OriginalL'auteur Eren Ersönmez
Le problème
De cette notification signifie que le fil est en cours d'exécution de code non managé, et ne peut donc pas être utilisée pour évaluer l'expression.
Dans certaines situations, vous pourriez attendre l'appel pour le retour de code managé avant l'évaluation de l'expression. Malheureusement, dans cette situation, cela n'arrivera pas jusqu'à ce que vous arrêtez le service.
Une Alternative
Vous pourriez envisager de substitution de la ServiceBase.OnCustomCommand méthode et de mettre un point d'arrêt, vous pouvez évaluer votre expression.
Vous pouvez invoquer la commande personnalisée comme suit:
Ce type de défaillance voyez-vous? Un blocage ou une exception?
Le même que j'avais avant "Impossible d'évaluer l'expression...". Ont été, le service sera juste accrocher sur le ServiceBase.Exécuter(ServicesToRun).
Oh, je pensais que tu voulais juste utiliser l'espion de la fenêtre. Maintenant, il semble que vous voulez un point d'arrêt dans le code de votre application. Sont vos symboles chargés de l'assemblage que vous souhaitez déboguer? (Vous trouverez dans la fenêtre de Sortie (ctrl+alt+o))
Les symboles sont chargés, je ne peux jamais obtenir le point de rupture à feu dans le Programme.cs fichier.
OriginalL'auteur agent-j
L'exception que vous voyez signifie que le code non managé est en train de lancer une exception, si l' .NET débogueur ne peut pas vous montrer l'habitude de détails utiles.
Que faites-vous dans MyService1() ? Pouvez-vous poster le code à l'intérieur?
Aussi que vous essayez de déboguer le service par juste de commencer à partir de l'environnement. Qui pourraient ne pas fonctionner.
J'ai l'habitude d'écrire quelque chose comme ceci:
Puis dans les propriétés du projet, sous l'onglet Débogage entrer
/console
que les arguments de ligne de commande. Vous devriez être en mesure d'intervenir dans l'application et le débogage. Vous ne pouvez déboguer un service en l'installant d'abord: http://msdn.microsoft.com/en-us/library/7a50syb3(v=vs. 80).aspxEssayez les instructions ici: msdn.microsoft.com/en-us/library/tdw0c6sf(v=vs. 80).aspx
OriginalL'auteur greg84