Dela via


Tolka felkoder

När du har fastställt vilket program som är orsaken till ett problem måste du ta reda på vilket fel som har inträffat. Fel utlöses och rapporteras i olika format, beroende på vilket språk programmet använder.

I Microsoft Visual C++ returneras värdena för lyckade, varningar och fel med ett 32-bitarstal som kallas HRESULT. En lista över systemdefinierade HRESULT- värden finns i huvudfilen Winerror.h som ingår i Windows SDK. Den här filen innehåller alla COM+-felkoder och beskrivningar. Mer information om HRESULT--värden finns i Felhantering.

I Java-programmeringen genereras en instans av com.ms.com.ComFailException för att signalera ett fel, där ComFailException-objektet anger en HRESULT. En instans av com.ms.com.ComSuccessException indikerar framgång med returvärdet False. Information om hur du tolkar dessa undantag finns i Microsoft Visual J++-dokumentationen.

Note

COM+-programserverprocesser som är värdar för Visual J++-objekt kommer inte att vara inaktiva (även med noll aktiva objekt) om du inte inaktiverar JIT-felsökning i VJ6 IDE. Information om hur du gör det finns i dokumentationen för Visual J++.

I Visual Basic kan du hämta HRESULT- värden genom att undersöka egenskapen Err.Number. En beskrivning av felet kan hämtas med egenskapen Err.Description.

Du kan också använda ERRLOOK-verktyget i Microsoft Visual Studio för att hämta ett systemfelmeddelande eller ett modulfelmeddelande. ERRLOOK hämtar felmeddelandetexten automatiskt om du drar och släpper ett hexadecimalt eller decimalvärde från Visual Studio-felsökningsprogrammet eller något annat Automation-aktiverat program. Du kan också ange ett värde genom att antingen skriva det i eller klistra in det från IDE-urklipp och klicka på alternativet Slå upp.

Följande C++-metod skriver ut en beskrivning av felet baserat på indata 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); 
}

Följande tabell innehåller beskrivningar av vanliga felkoder i COM+.

Felkoder Definitioner
COMADMIN_E_ALREADYINSTALLED
Objektet är redan registrerat.
COMADMIN_E_APP_FILE_READFAIL – Misslyckades med att läsa appsfilen
Det uppstod ett fel vid läsning av programfilen.
COMADMIN_E_APP_FILE_VERSION
Ogiltigt versionsnummer i programfilen.
COMADMIN_E_APP_FILE_WRITEFAIL
Det uppstod ett fel vid skrivning till programfilen.
COMADMIN_E_APPDIRNOTFOUND
Det gick inte att hitta programinstallationskatalogen.
COMQC_E_APPLICATION_NOT_QUEUED
Endast COM+-program som är märkta "i kö" kan skapas med hjälp av "kö"-monikern.
COMADMIN_E_APPLICATIONEXISTS
Programmet är redan installerat.
COMADMIN_E_APPLID_MATCHES_CLSID
Ett CLSID med samma GUID som det nya program-ID:t är redan installerat på den här datorn.
COMADMIN_E_APP_NOT_RUNNING
Det angivna programmet körs inte för närvarande.
COMADMIN_E_AUTHENTICATIONLEVEL
Det går inte att ange nödvändig autentiseringsnivå för uppdateringsbegäran.
COMADMIN_E_BADPATH
Filsökvägen är ogiltig.
COMADMIN_E_BADREGISTRYLIBID
Det registrerade typbiblioteks-ID:t är ogiltigt.
COMADMIN_E_BADREGISTRYPROGID
Komponentens ProgID saknas eller är skadad.
COMADMIN_E_CAN_NOT_EXPORT_APP_PROXY
Programproxyn kan inte exporteras.
COMADMIN_E_KAN_INTE_STARTA_APP
Det gick inte att starta programmet eftersom det antingen är ett biblioteksprogram eller en programproxy.
COMADMIN_E_CAN_NOT_EXPORT_SYS_APP
Systemprogrammet kan inte exporteras.
COMADMIN_E_KAN_INTE_PRENUMERERA_PÅ_KOMPONENT
Användaren kan inte prenumerera på den här komponenten eftersom komponenten kan ha importerats.
COMADMIN_E_CANTCOPYFILE
Ett fel uppstod när filen skulle kopieras.
COMADMIN_E_CLSIDORIIDMISMATCH
CLSID:er eller IID:er i programfilen matchar inte motsvarande DLL:er.
COMADMIN_E_COMP_MOVE_BAD_DEST - Felaktig måldestination för komponentflytt
Komponentflytten misslyckades eftersom målprogrammet inte längre finns.
COMADMIN_E_COMP_MOVE_LOCKED
Komponentflytten tilläts inte eftersom käll- eller målprogrammet antingen är ett systemprogram eller för närvarande är låst mot ändringar.
COMADMIN_E_COMPFILE_BADTLB
Det gick inte att läsa in typbiblioteket.
COMADMIN_E_COMPFILE_CLASSNOTAVAIL
DLL-filen stöder inte de komponenter som anges i typbiblioteket.
COMADMIN_E_COMPFILE_DOESNOTEXIST
Den här filen finns inte.
COMADMIN_E_COMPFILE_GETCLASSOBJ
Metoden GetClassObject misslyckades i DLL-filen.
COMADMIN_E_COMPFILE_LOADDLLFAIL
DLL:en kunde inte läsas in.
COMADMIN_E_COMPFILE_NOREGISTRAR
Komponentregistratorn som refereras i den här filen är inte tillgänglig.
COMADMIN_E_COMPFILE_NOTINSTALLABLE
Filen innehåller inte komponenter eller komponentinformation.
COMADMIN_E_COREQCOMPINSTALLED
En komponent i samma DLL är redan installerad.
COMADMIN_E_DLLLOADFAILED
DLL:en kunde inte läsas in.
COMADMIN_E_DLLREGISTERSERVER
Funktionen DllRegisterServer misslyckades när komponenten installerades.
COMADMIN_E_EVENTCLASS_CANT_BE_SUBSCRIBER
Det går inte att konfigurera en händelseklass som en prenumerantkomponent. När ett försök görs att skapa en prenumeration med en händelseklass som prenumerant returneras det här felet.
COMADMIN_E_INVALIDUSERIDS
En eller flera användare i programfilen är inte giltiga.
COMADMIN_E_KEYMISSING
Objektet hittades inte i katalogen.
COMADMIN_E_LIB_APP_PROXY_INCOMPATIBLE
Biblioteksprogram och programproxyservrar är inte kompatibla. Det här felet returneras när ett försök görs att exportera en programproxy och programmets aktiveringsegenskap är ett bibliotek.
COMADMIN_E_NOREGISTRYCLSID
Komponentens CLSID saknas eller är skadad.
COMADMIN_E_NOSERVERSHARE
Ingen serverfildelning är tillgänglig.
COMADMIN_E_NOTCHANGEABLE
Ändringar i det här objektet och dess underobjekt har inaktiverats.
COMADMIN_E_NOTDELETEABLE
Borttagningsfunktionen har inaktiverats för det här objektet.
COMADMIN_E_NOTINREGISTRY
Objektet hittades inte i registret.
COMADMIN_E_NOUSER
En eller flera användare är inte giltiga.
COMADMIN_E_OBJECT_DOES_NOT_EXIST
Det går inte att hitta något av de angivna objekten.
COMADMIN_E_OBJEKT_FÖRÄLDRAR_SAKNAS
Ett av objekten som infogas eller uppdateras tillhör inte en giltig överordnad samling.
COMADMIN_E_OBJECTERRORS
Det uppstod fel vid åtkomst till ett eller flera objekt. Mer information finns i samlingen ErrorInfo.
COMADMIN_E_OBJECTEXISTS
Det objekt som du försöker lägga till eller byta namn på finns redan.
COMADMIN_E_OBJECTINVALID
En eller flera av objektets egenskaper saknas eller är ogiltiga.
COMADMIN_E_OBJECTNOTPOOLABLE
Det går inte att poola det här objektet.
COMADMIN_E_PROPERTYSAVEFAILED (Ett fel inträffade vid sparande av egenskaper)
En eller flera egenskapsinställningar är antingen ogiltiga eller i konflikt med varandra.
COMADMIN_E_PROPERTY_OVERFLOW
Egenskapsvärdet är för stort.
COMADMIN_E_REGFILE_CORRUPT
Registreringsfilen är skadad.
COMADMIN_E_REGISTERTLB
Det gick inte att registrera typbiblioteket.
COMADMIN_E_REGISTRARFAILED
Fel inträffade i komponentregistratorn.
COMADMIN_E_REMOTEINTERFACE
Gränssnittsinformation saknas eller ändras.
KOMADMIN_E_KRÄVER_ANNAN_PLATTFORM
Den här åtgärden är inte aktiverad på den här plattformen.
COMADMIN_E_ROLE_DOES_NOT_EXIST
En roll som tilldelats en komponent, ett gränssnitt eller en metod finns inte i programmet.
COMADMIN_E_ROLEEXISTS
Rollen finns redan.
COMADMIN_E_SERVICENOTINSTALLED
Tjänsten är inte installerad.
COMADMIN_E_SESSION
Serverkatalogversionen stöds inte.
En del är redan pausade
En eller flera av de angivna programprocesserna har redan pausats.
COMADMIN_S_SOMEALREADYRUNNING
En eller flera av de angivna programprocesserna kördes redan.
COMADMIN_FEL_START_APP_BEHÖVER_KOMPONENTER
Om du vill starta programmet måste du ha komponenter i ett program.
COMADMIN_E_SVCAPP_NOT_POOLABLE_OR_RECYCLABLE
COM+-programmen som körs som en NT-tjänst kanske inte markeras som poolade eller återanvända.
COMADMIN_E_SYSTEMAPP
Det går inte att utföra den här åtgärden i systemprogrammet.
COMADMIN_E_USER_IN_SET
En eller flera användare har redan tilldelats en lokal partitionsuppsättning.
If adding an explanation is necessary, it might look like this: COMADMIN_E_USERPASSWDNOTVALID – Användarlösenordet är inte giltigt
Identiteten eller lösenordet som angetts i programmet är inte giltigt.

Felisolering och fail-fast strategi

Hitta källan till ett fel

Hur COM+ ändrar returvärden

Strategier för hantering av fel i COM+

Felsökning