Ett COM+-program kan sluta fungera i Windows när en användare loggar ut

Den här artikeln innehåller en lösning på ett problem där ett COM+-program slutar fungera i Windows när en användare loggar ut.

Ursprungligt KB-nummer: 2287297

Symptom

På en Windows-server har du ett COM+-serverprogram där identiteten är konfigurerad att köras som en specifik användare. När du har arbetat en stund kan programmet sluta fungera och fortsätta att misslyckas. Du måste starta om COM+-programmet för att lösa problemet.

Du kan se ett fel som liknar följande i programloggen på KLIENTdatorn. Om den körbara klienten körs på samma dator som COM+-serverprogrammet visas det här felet på COM+-servern:

Händelsetyp: Fel
Händelsekälla: DCOM
Händelsekategori: Ingen
Händelse-ID: 10006
Datum: <DateTime>
Tid: <DateTime>
Användare: Domän\användare
Dator:*****
Beskrivning:
DCOM fick felet "Ospecificerat fel" från datorns servernamn när servern skulle aktiveras: {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXX}

I det här fallet meddelar händelsemeddelandet att felet (E_FAIL eller 80004005 eller ospecificerat fel) returneras från servern. CLSID för komponenten visas i händelseloggposten.

Du ser även händelser som liknar följande i programloggen på datorn där COM+-programmet körs:

Loggnamn: Program
Källa: Tjänsten Microsoft-Windows-User Profiles
Datum: <DateTime>
Händelse-ID: 1530
Aktivitetskategori: Ingen
Nivå: Varning
Nyckelord: Classic
Användare: SYSTEM
Dator: SERVERNAME
Beskrivning:
Windows har upptäckt att registerfilen fortfarande används av andra program eller tjänster. Filen kommer att tas bort nu. De program eller tjänster som innehåller registerfilen kanske inte fungerar korrekt efteråt.

DETALJ-
1 användarregisterreferenser som läckt ut från \Registry\User\S-1-5-21-1049297961-3057247634-349289542-1004_Classes:
Process 2428 (\Device\HarddiskVolume1\Windows\System32\dllhost.exe) har öppnat nyckeln \REGISTRY\USER\S-1-5-21-1123456789-3057247634-349289542-1004_CLASSES

Du kan se anropet för att skapa en instans av komponenten som returnerar 0x800703fa.

Orsak

Användaridentiteten som är associerad med COM+-programmet loggas in när COM+-programmet först initieras. Om den här användaren skulle logga ut från datorn skulle användarens profil tas bort och COM+-programmet kan inte längre läsa registernycklar i profilen för användaridentiteten. Från och med Windows Vista framtvingar användarprofiltjänsten avlastningen av en användarprofil när användaren loggar ut. Det här är en situation där funktionen för att framtvinga avlastning av användarprofilen kan bryta ett program om registerhandtagen inte stängs under processen. Den här nya användarprofiltjänstens funktion är standardbeteendet.

Åtgärd

Som en lösning kan det vara nödvändigt att ändra standardbeteendet för användarprofiltjänsten. Principinställningen Ta inte bort användarregistret vid utloggning av användare räknare standardbeteendet för Vista och nyare operativsystem. När den är aktiverad kommer användarprofiltjänsten inte att ta bort registret med kraft, utan väntar i stället tills inga andra processer använder användarregistret innan det tas bort. Principen finns i grupprincipredigeraren (gpedit.msc). Principen Ta inte bort användarregistret vid utloggning av användare finns under Datorkonfiguration>Administrativa mallar Systemanvändarprofiler.>>

Ändra inställningen från Inte konfigurerad till Aktiverad, vilket inaktiverar den nya funktionen Användarprofiltjänst. DisableForceUnload är värdet som läggs till i registret.

Mer information

Windows tar alltid bort användarregistret, även om det finns några öppna referenser till registernycklarna per användare vid användarloggning. Med den här principinställningen kan en administratör ta bort det här beteendet, vilket hindrar Windows från att ta bort användarregistret vid utloggning av användare.

Kommentar

Den här principen bör endast användas för fall där du kan stöta på programkompatibilitetsproblem på grund av det här specifika Windows-beteendet. Vi rekommenderar inte att du aktiverar den här principen som standard eftersom det kan hindra användare från att få en uppdaterad version av sin centrala användarprofil.

Om du aktiverar den här principinställningen kommer Windows inte att ta bort användarregistret vid utloggning utan tar bort registret när alla öppna referenser till registernycklarna per användare stängs.

Om du inaktiverar eller inte konfigurerar den här principinställningen kommer Windows alltid att ta bort användarregistret vid utloggning, även om det finns några öppna referenser till registernycklarna per användare vid användarloggning.

Även om du har aktiverat inställningen Ta inte bort användarregistret med kraft vid principinställningen för utloggning av användare, kan varningen händelse-ID 1530 loggas. Varningen loggas efter det första försöket att ta bort registreringsdatafilen. Om detta misslyckas kontrolleras principen för att avgöra om registerdatafilen ska tvingas att ta bort oavsett öppna registerreferenser.