Interpretando códigos de erro
Depois de determinar qual aplicativo é a origem de um problema, você precisa descobrir qual erro ocorreu. Os erros são gerados e relatados em diferentes formatos, dependendo do idioma usado pelo aplicativo.
No Microsoft Visual C++, valores de êxito, aviso e falha são retornados usando um número de 32 bits conhecido como HRESULT. Para obter uma lista de valores HRESULT definidos pelo sistema, consulte o arquivo de cabeçalho Winerror.h incluído com o SDK do Windows. Este arquivo inclui todos os códigos de erro COM+ e descrições. Para obter mais informações sobre valores HRESULT , consulte Tratamento de erros.
Na linguagem Java, uma instância de com.ms.com.ComFailException é lançada para indicar falha, onde o objeto ComFailException especifica um HRESULT. Uma instância de com.ms.com.ComSuccessException indica êxito com um valor de retorno False. Para obter informações sobre como interpretar essas exceções, consulte a documentação do Microsoft Visual J++.
Observação
Os processos do servidor de aplicativos COM+ que hospedam objetos do Visual J++ não ficarão ociosos (mesmo com zero objetos ativos), a menos que você desative a depuração JIT no IDE VJ6. Para obter informações sobre como fazer isso, consulte a documentação do Visual J++.
No Visual Basic, você pode recuperar valores HRESULT examinando a propriedade Err.Number. Uma descrição do erro pode ser recuperada com a propriedade Err.Description.
Você também pode usar o utilitário ERRLOOK no Microsoft Visual Studio para recuperar uma mensagem de erro do sistema ou mensagem de erro de módulo. ERRLOOK recupera o texto da mensagem de erro automaticamente se você arrastar e soltar um valor hexadecimal ou decimal do depurador do Visual Studio ou outro aplicativo habilitado para automação. Você também pode inserir um valor digitando-o ou colando-o na área de transferência do IDE e clicando na opção Pesquisar .
O método C++ a seguir imprime uma descrição do erro, com base na entrada HRESULT.
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
void ErrorDescription(HRESULT hr)
{
if(FACILITY_WINDOWS == HRESULT_FACILITY(hr))
hr = HRESULT_CODE(hr);
TCHAR* szErrMsg;
if(FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR)&szErrMsg, 0, NULL) != 0)
{
_tprintf(TEXT("%s"), szErrMsg);
LocalFree(szErrMsg);
} else
_tprintf( TEXT("[Could not find a description for error # %#x.]\n"), hr);
}
A tabela a seguir fornece descrições de códigos de erro comuns em COM+.
Códigos do Erro | Definições |
---|---|
COMADMIN_E_ALREADYINSTALLED |
O objeto já está registrado. |
COMADMIN_E_APP_FILE_READFAIL |
Ocorreu um erro ao ler o arquivo de aplicativo. |
COMADMIN_E_APP_FILE_VERSION |
Número de versão inválido no arquivo do aplicativo. |
COMADMIN_E_APP_FILE_WRITEFAIL |
Ocorreu um erro ao gravar no arquivo do aplicativo. |
COMADMIN_E_APPDIRNOTFOUND |
O diretório de instalação do aplicativo não foi encontrado. |
COMQC_E_APPLICATION_NOT_QUEUED |
Somente aplicativos COM+ marcados como "em fila" podem ser criados usando o moniker "fila". |
COMADMIN_E_APPLICATIONEXISTS |
O aplicativo já está instalado. |
COMADMIN_E_APPLID_MATCHES_CLSID |
Um CLSID com o mesmo GUID que o novo ID do aplicativo já está instalado nesta máquina. |
COMADMIN_E_APP_NOT_RUNNING |
O aplicativo especificado não está em execução no momento. |
COMADMIN_E_AUTHENTICATIONLEVEL |
Não é possível definir o nível de autenticação necessário para a solicitação de atualização. |
COMADMIN_E_BADPATH |
O caminho do arquivo é inválido. |
COMADMIN_E_BADREGISTRYLIBID |
O ID da biblioteca de tipos registrados é inválido. |
COMADMIN_E_BADREGISTRYPROGID |
O ProgID do componente está ausente ou corrompido. |
COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY |
O proxy de aplicativo não é exportável. |
COMADMIN_E_CAN_NOT_START_APP |
Falha ao iniciar o aplicativo porque ele é um aplicativo de biblioteca ou um proxy de aplicativo. |
COMADMIN_E_CAN_NOT_EXPORT_SYS_APP |
O aplicativo do sistema não é exportável. |
COMADMIN_E_CANT_SUBSCRIBE_TO_COMPONENT |
O usuário não pode assinar esse componente porque o componente pode ter sido importado. |
COMADMIN_E_CANTCOPYFILE |
Ocorreu um erro ao copiar o arquivo. |
COMADMIN_E_CLSIDORIIDMISMATCH |
CLSIDs ou IIDs de arquivo de aplicativo não correspondem às DLLs correspondentes. |
COMADMIN_E_COMP_MOVE_BAD_DEST |
A movimentação do componente falhou porque o aplicativo de destino não existe mais. |
COMADMIN_E_COMP_MOVE_LOCKED |
A movimentação do componente não foi permitida porque o aplicativo de origem ou de destino é um aplicativo do sistema ou está atualmente bloqueado contra alterações. |
COMADMIN_E_COMPFILE_BADTLB |
A biblioteca de tipos não pôde ser carregada. |
COMADMIN_E_COMPFILE_CLASSNOTAVAIL |
A DLL não oferece suporte aos componentes listados na biblioteca de tipos. |
COMADMIN_E_COMPFILE_DOESNOTEXIST |
Esse arquivo não existe. |
COMADMIN_E_COMPFILE_GETCLASSOBJ |
O método GetClassObject falhou na DLL. |
COMADMIN_E_COMPFILE_LOADDLLFAIL |
A DLL não pôde ser carregada. |
COMADMIN_E_COMPFILE_NOREGISTRAR |
O registrador de componentes mencionado neste arquivo não está disponível. |
COMADMIN_E_COMPFILE_NOTINSTALLABLE |
O arquivo não contém componentes ou informações de componentes. |
COMADMIN_E_COREQCOMPINSTALLED |
Um componente na mesma DLL já está instalado. |
COMADMIN_E_DLLLOADFAILED |
A DLL não pôde ser carregada. |
COMADMIN_E_DLLREGISTERSERVER |
A função DllRegisterServer falhou quando o componente foi instalado. |
COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER |
Uma classe de evento não pode ser configurada como um componente de assinante. Quando uma tentativa é feita para criar uma assinatura com uma classe de evento como um assinante, esse erro é retornado. |
COMADMIN_E_INVALIDUSERIDS |
Um ou mais usuários no arquivo de aplicativo não são válidos. |
COMADMIN_E_KEYMISSING |
O objeto não foi encontrado no catálogo. |
COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE |
Aplicativos de biblioteca e proxies de aplicativo são incompatíveis. Esse erro é retornado quando é feita uma tentativa de exportar um proxy de aplicativo e a propriedade de ativação do aplicativo é uma biblioteca. |
COMADMIN_E_NOREGISTRYCLSID |
O CLSID do componente está ausente ou corrompido. |
COMADMIN_E_NOSERVERSHARE |
Nenhum compartilhamento de arquivos do servidor está disponível. |
COMADMIN_E_NOTCHANGEABLE |
As alterações nesse objeto e em seus subobjetos foram desabilitadas. |
COMADMIN_E_NOTDELETEABLE |
A função delete foi desabilitada para este objeto. |
COMADMIN_E_NOTINREGISTRY |
O objeto não foi encontrado no registro. |
COMADMIN_E_NOUSER |
Um ou mais usuários não são válidos. |
COMADMIN_E_OBJECT_DOES_NOT_EXIST |
Um dos objetos especificados não pode ser encontrado. |
COMADMIN_E_OBJECT_PARENT_MISSING |
Um dos objetos que está sendo inserido ou atualizado não pertence a uma coleção pai válida. |
COMADMIN_E_OBJECTERRORS |
Ocorreram erros ao acessar um ou mais objetos. Para obter mais informações, consulte a coleção ErrorInfo . |
COMADMIN_E_OBJECTEXISTS |
O objeto que você está tentando adicionar ou renomear já existe. |
COMADMIN_E_OBJECTINVALID |
Uma ou mais propriedades do objeto estão ausentes ou são inválidas. |
COMADMIN_E_OBJECTNOTPOOLABLE |
Este objeto não pode ser agrupado. |
COMADMIN_E_PROPERTYSAVEFAILED |
Uma ou mais configurações de propriedade são inválidas ou estão em conflito entre si. |
COMADMIN_E_PROPERTY_OVERFLOW |
O valor da propriedade é muito grande. |
COMADMIN_E_REGFILE_CORRUPT |
O arquivo de registro está corrompido. |
COMADMIN_E_REGISTERTLB |
O sistema não pôde registrar a biblioteca de tipos. |
COMADMIN_E_REGISTRARFAILED |
Ocorreram erros enquanto estava no registrador de componentes. |
COMADMIN_E_REMOTEINTERFACE |
As informações da interface estão ausentes ou foram alteradas. |
COMADMIN_E_REQUIRES_DIFFERENT_PLATFORM |
Esta operação não está habilitada nesta plataforma. |
COMADMIN_E_ROLE_DOES_NOT_EXIST |
Uma função atribuída a um componente, interface ou método não existe no aplicativo. |
COMADMIN_E_ROLEEXISTS |
O papel já existe. |
COMADMIN_E_SERVICENOTINSTALLED |
O serviço não está instalado. |
COMADMIN_E_SESSION |
A versão do catálogo do servidor não é suportada. |
COMADMIN_S_SOMEALREADYPAUSED |
Um ou mais dos processos de aplicação especificados já estavam pausados. |
COMADMIN_S_SOMEALREADYRUNNING |
Um ou mais dos processos de aplicativo especificados já estavam em execução. |
COMADMIN_E_START_APP_NEEDS_COMPONENTS |
Para iniciar o aplicativo, você deve ter componentes em um aplicativo. |
COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE |
Os aplicativos COM+ em execução como um serviço NT não podem ser marcados como agrupados ou reciclados. |
COMADMIN_E_SYSTEMAPP |
Essa operação não pode ser executada no aplicativo do sistema. |
COMADMIN_E_USER_IN_SET |
Um ou mais usuários já estão atribuídos a um conjunto de partições local. |
COMADMIN_E_USERPASSWDNOTVALID |
A identidade ou senha definida no aplicativo não é válida. |