Vous n'avez pas spécifié l'environnement (le service Windows peut signifier géré ou non géré). Je vais deviner que vous travaillez en code natif, probablement en C ou C++. Si c'est le cas, vous devez être certain que vous utilisez la gestion des exceptions structurée à partir de Windows et non le mécanisme try/catch C++. En fonction de votre fournisseur de compilateur, l'implémentation C++ ne peut pas capturer toutes les exceptions.
En code managé, en fonction de la version de la structure, il existe des exceptions non gérables. En excluant ceux-ci, vous pouvez également échouer à attraper une exception si vous ne préparez pas une région contrainte et suivez attentivement les règles CER. Aussi, comme quelqu'un d'autre mentionné, vous pouvez regarder des exceptions non gérées dans votre AppDomain. (Vous ne pouvez pas être dans un seul domaine d'application, mais cela est rare et vous sauriez probablement si vous n'étiez pas). Une autre chose à retenir dans les deux cas est que chaque thread a sa propre pile et un ensemble d'exceptions. Si vous essayez d'essayer/attraper toutes les exceptions, vous devez attraper chaque thread qui fonctionne en votre nom. Dans le code managé, le thread finalizer (thread de garbage collector qui exécute "destructeurs" ou code de finalizer) est un endroit qui est souvent manqué.
Toutefois, avant de sauter à l'un de ces deux éléments, je rechercherais une sortie de processus ou une clause de sortie sans exception.
Est-ce que ce code est natif ou managé? C# ou C++? –