Update: Anwendung Speicherverluste einen Handle, wenn Sie in Visual C++ .NET 2003 die CRT-_popen-Funktion aufrufen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 892086 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Problembeschreibung

Wenn Sie der C-Laufzeit (CRT) _popen -Funktion in Microsoft Visual C++ .NET 2003, die Anwendung Verluste einen Handle jedes Mal verwenden, die Sie die Funktion aufrufen.

Ursache

Um Leistung zu verbessern, wurde die Implementierung für die CRT- _popen -Funktion in Visual C++ .NET 2003 geändert. Die CRT _popen -Funktion verwendet die WinAPI CreateProcess -Funktion jetzt anstelle der CRT- _spawnl -Funktion. Der Handle-Leck wird durch einen Bug in Visual C++ .NET 2003 verursacht. Dieser Fehler wird das hThread -Handle-Feld der PROCESS_INFORMATION-Struktur, die geöffnet bleiben.

Lösung

Ein Hotfix zur Behebung dieses Problems ist inzwischen bei Microsoft erhältlich; dieser Hotfix wurde jedoch ausschließlich zur Behebung des in diesem Artikel beschriebenen Problems entwickelt. Deshalb sollten Sie nur Systeme aktualisieren, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird unter Umständen zu einem späteren Zeitpunkt weiteren Tests unterzogen. Wenn Sie durch dieses Problem nicht schwerwiegend betroffen sind, empfiehlt Microsoft daher, auf das nächste Visual Studio .NET 2003 Service Pack warten, das diesen Hotfix enthält wird.

Wenn Sie das Problem sofort beheben möchten, wenden Sie sich an Microsoft Product Support Services, um den Hotfix zu erhalten. Eine vollständige Liste mit Telefonnummern der Microsoft-Produktsupport und Informationen Supportkosten der folgenden Microsoft-Website:
http://support.microsoft.com/contactus/?ws=support
Hinweis: PLEASE DO NOT TRANSLATE and DELETE THIS PASSAGE. IT DOES NOT APPLY TO GERMANY.

Voraussetzungen

Es gelten keine Voraussetzungen.

Neustartanforderung

Sie müssen Ihren Computer nicht neu starten, nachdem Sie diesen Hotfix installiert haben.

Ersetzte Hotfixes

Dieser Hotfix ersetzt keine anderen Hotfixes.

Dateiinformationen

Die englische Version dieses Hotfixes weist die Dateiattribute (oder höher Dateiattribute), die in der folgenden Tabelle aufgelistet werden. Die Datums- und Uhrzeitangaben für diese Dateien sind in Coordinated Universal Time (UTC) angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln verwenden Sie die Registerkarte Zeitzone des Tools ? Datum und Uhrzeit in der Systemsteuerung.
   Date         Time   Version            Size    File name
   --------------------------------------------------------------
   03-Feb-2005  02:57                     13,858  A_map.c
   03-Feb-2005  03:27                    363,744  Eh.lib
   03-Feb-2005  02:57                     10,456  Io.h
   06-Feb-2004  19:29                      4,246  Ios.cpp
   03-Feb-2005  03:30                  2,707,628  Libc.lib
   03-Feb-2005  03:34                  3,023,492  Libcd.lib
   03-Feb-2005  03:31                  2,937,528  Libcmt.lib
   03-Feb-2005  03:36                  3,304,810  Libcmtd.lib
   03-Feb-2005  03:30                  3,601,372  Libcp.lib
   03-Feb-2005  03:35                  4,433,774  Libcpd.lib
   03-Feb-2005  03:32                  3,651,664  Libcpmt.lib
   03-Feb-2005  03:36                  4,449,888  Libcpmtd.lib
   03-Feb-2005  04:11  7.10.4353.0       499,712  Msvcp71.dll      
   03-Feb-2005  03:37  7.10.4353.0       765,952  Msvcp71d.dll     
   03-Feb-2005  04:11  7.10.4353.0       348,160  Msvcr71.dll      
   03-Feb-2005  03:37  7.10.4353.0       544,768  Msvcr71d.dll     
   03-Feb-2005  02:58                     17,400  Popen.c
   03-Feb-2005  02:57                      9,948  Read.c
   03-Feb-2005  16:00                    202,240  Vc_user_crt71_rtl_x86_---.msm
   03-Feb-2005  16:00                    151,040  Vc_user_stl71_rtl_x86_---.msm

Status

Microsoft hat bestätigt, dass dies ein Problem in Microsoft-Produkten handelt, die im Abschnitt "Gilt für" aufgeführt sind.

Weitere Informationen

Überprüfen, ob Ihre Anwendung ein Handle-Leck verfügt, Überwachen Sie die Anzahl der Handles im Windows Task-Manager.

Beispielsweise, wenn Sie erstellen und führen Sie den folgenden Visual C++ Win32-Konsole Projektcode, die Anzahl der Handles werden weiterhin im Windows Task-Manager zu erhöhen:
// Testpopen.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>


int _tmain(int argc, _TCHAR* argv[])
{
	FILE * pPipe = NULL;
	char	buffer[128] = {0};

	while (!kbhit())
	{
		pPipe = _popen("dir *.* /s", "r");

		if (pPipe != NULL)
		{
			printf(_T("Pipe opened at 0x%08x\n"), (unsigned long)pPipe);

			while (!feof(pPipe))
			{
				if (fgets(buffer, 128, pPipe))
					printf(buffer);
			}

			printf("Pipe closed (%d)\n", _pclose(pPipe));			
		}
	}	

	return 0;

}

Weitere Informationen finden Sie die folgende KB-Artikelnummer:
824684Erläuterung von Standardbegriffen bei Microsoft Softwareupdates

Eigenschaften

Artikel-ID: 892086 - Geändert am: Montag, 15. Mai 2006 - Version: 2.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Academic Edition
Keywords: 
kbmt kbqfe kbbug kbfix kbprb kbhotfixserver KB892086 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 892086
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com