Desenvolvemos um serviço personalizado do Windows em C # como parte de um grande aplicativo corporativo. Nosso departamento de QA testa várias versões deste serviço.
O laboratório de controle de qualidade tem várias (mais de 20) cópias deste serviço instaladas em uma caixa de teste do Windows 2003. Cada cópia está em sua própria pasta e possui um nome de serviço exclusivo, embora cada arquivo executável tenha o mesmo nome (OurWindowsService.exe, por exemplo). Cada serviço usa as mesmas credenciais do Windows (um usuário do domínio).
A finalidade deste serviço é manipular mensagens do MSMQ. As mensagens enfileiradas fazem todo tipo de coisas importantes.
Por algum motivo, eles podem executar apenas 5 desses serviços por vez. Quando começamos a sexta, o serviço falha na inicialização.
Por exemplo, posso iniciar # 1, # 2, # 3, # 4 e # 5. Quando eu começo o 6, ele cai. No entanto, se eu parar # 1 e começar # 6, # 6 é executado corretamente, e agora # 1 falha ao iniciar.
Quando os serviços falham, o seguinte erro aparece no log de eventos do Windows:
Faulting application
OurWindowsService.exe, version
5.40.1.1, faulting module kernel32.dll, version 5.2.3790.4480,
fault address 0x0000bef7.
Consegui usar o WinDbg para gerar um arquivo de despejo postmortem. O arquivo de despejo revelou que a falha ocorre ao tentar atrasar o carregamento de SHLWAPI.dll:
0:000> kb100
ChildEBP RetAddr Args to Child
0012ece4 79037966 c06d007e 00000000 00000001 KERNEL32!RaiseException+0x53
0012ed4c 790099ba 00000008 0012ed08 7c82860c mscoree!__delayLoadHelper2+0x139
0012ed98 790075b1 001550c8 0012edac 0012fb34 mscoree!_tailMerge_**SHLWAPI_dll**+0xd
0012edb0 79007623 001550c8 0012edf8 0012edf4 mscoree!XMLGetVersionWithSupported+0x22
0012ee00 790069a4 aa06f1b0 00000000 000001fe mscoree!RuntimeRequest::GetRuntimeVersion+0x56
0012f478 790077aa 00000001 7903fb4c 0012fb34 mscoree!RuntimeRequest::ComputeVersionString+0x5bd
0012f89c 79007802 00000001 0012f8b4 7903fb4c mscoree!RuntimeRequest::FindVersionedRuntime+0x11c
0012f8b8 79007b19 00000001 00000000 aa06fa6c mscoree!RuntimeRequest::RequestRuntimeDll+0x2c
0012ffa4 79007c02 00000001 0012ffbc 00000000 mscoree!GetInstallation+0x72
0012ffc0 77e6f23b 00000000 00000000 7ffdf000 mscoree!_CorExeMain+0x12
0012fff0 00000000 79007bf0 00000000 78746341 KERNEL32!BaseProcessStart+0x23
Eu acredito que o código de erro entregue ao Kernel32.RaiseException, c06d007e, significa Module Not Found, mas não tenho certeza.
Isso soa familiar para alguém? Estamos atingindo algum limite no número de instâncias de serviço em algum nome de arquivo? O MSMQ não gosta de mais de 5 serviços de escuta?