Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

So wird's gemacht: Verwenden der SetupAPI-SetupIterateCabinet()-Funktion

Wichtig: Dieser Artikel wurde maschinell übersetzt und wird dann möglicherweise mithilfe des Community Translation Framework (CTF) von Mitgliedern unserer Microsoft Community nachbearbeitet. Weitere Informationen zu CTF finden Sie unter http://support.microsoft.com/gp/machine-translation-corrections/de.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 189085
Zusammenfassung
Dieser Artikel enthält ein Beispiel zur Verwendung die SetupAPI'sSetupIterateCabinet()-Funktion zum Extrahieren von Dateien aus einer CAB-Datei. Wenn Youuse SetupIterateCabinet() nicht benötigen eine INF-Datei.
Weitere Informationen
Dieses Beispiel sucht nach einer CAB-Datei mit dem Namen TestCab.cab. Sie sollten TestCab.cab in demselben Ordner wie die ausführbare Beispieldatei.

Hinweis: Extrahieren von Dateien aus Windows 95 und Windows 98-System CAB-Dateien mithilfe der Setup-API wird nicht unterstützt. CAB-Dateien von denen Setup-API Dateien extrahieren sollten Entwickler erstellte CAB SDK (MakeCab.exe) verwenden. Unter Windows 95 Setup-API konnte Extrahieren von Betriebssystem-Ablagen, aber dies funktioniert nicht unter Windows 98 und dies beabsichtigt.

Es war nie gedacht für Entwickler von Betriebssystemen Dateien die Setupapi extrahieren oder unterstützt. Die unterstützte Methode ist Extract.exe verwenden.

Beispielcode

Erstellen Sie ein neues Konsolenanwendungsprojekt in Visual C++, Version 5.0, und fügen Sie folgende Code hinzu:
   #include <windows.h>    // Includes basic windows functionality.   #include <stdio.h>      // Includes the standard i/o functions.   #include <string.h>     // Includes the string functions.   #include <tchar.h>      // Includes the string functions.   #include <setupapi.h>   // Includes the SetupAPI.   // Link with SetupAPI.Lib.   #pragma comment (lib, "setupapi.lib")   #define CAB_FILE_NAME      TEXT("TestCab.Cab")   // Global variable holding destination directory.   TCHAR g_szTargetPath[MAX_PATH];   void IterateCabinet(PTSTR pszCabFile);   void main()   {      TCHAR szSourcePath[MAX_PATH];      TCHAR szInfFileName[MAX_PATH];      GetModuleFileName(NULL, szSourcePath, MAX_PATH);      // Strip setup.exe off path.      *(strrchr(szSourcePath, '\\') + 1) = '\0';      // Make the .exe directory the Target directory.      lstrcpy(g_szTargetPath, szSourcePath);      // Assume that CAB_FILE_NAME is in the .exe directory.      lstrcpy(szInfFileName, szSourcePath);      lstrcat(szInfFileName, CAB_FILE_NAME);      IterateCabinet(szInfFileName);   }   LRESULT   WINAPI   CabinetCallback ( IN PVOID pMyInstallData,                     IN UINT Notification,                     IN UINT Param1,                     IN UINT Param2 )   {      LRESULT lRetVal = NO_ERROR;      TCHAR szTarget[MAX_PATH];      FILE_IN_CABINET_INFO *pInfo = NULL;      FILEPATHS *pFilePaths = NULL;      lstrcpy(szTarget,g_szTargetPath);      switch(Notification)      {         case SPFILENOTIFY_FILEINCABINET:            pInfo = (FILE_IN_CABINET_INFO *)Param1;            lstrcat(szTarget, pInfo->NameInCabinet);            lstrcpy(pInfo->FullTargetName, szTarget);            lRetVal = FILEOP_DOIT;  // Extract the file.            break;         case SPFILENOTIFY_FILEEXTRACTED:            pFilePaths = (FILEPATHS *)Param1;            printf ( "Extracted %s\n",pFilePaths->Target);            lRetVal = NO_ERROR;            break;         case SPFILENOTIFY_NEEDNEWCABINET: // Unexpected.            lRetVal = NO_ERROR;            break;      }      return lRetVal;   }   void IterateCabinet(PTSTR pszCabFile)   {      LPVOID lpMsgBuf;      if (  !SetupIterateCabinet(pszCabFile,            0, (PSP_FILE_CALLBACK)CabinetCallback, 0) )      {         FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |                        FORMAT_MESSAGE_FROM_SYSTEM |                        FORMAT_MESSAGE_IGNORE_INSERTS, NULL,                        GetLastError(), MAKELANGID(LANG_NEUTRAL,                        SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );         MessageBox( NULL,(LPTSTR) lpMsgBuf,                     "SetupIterateCabinet() Error :",                     MB_OK | MB_ICONEXCLAMATION | MB_TOPMOST);      }   }				

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 189085 – Letzte Überarbeitung: 10/04/2015 11:15:00 – Revision: 2.0

  • kbhowto kbmt KB189085 KbMtde
Feedback
/html> /html>html>html>tml>l> /c1.microsoft.com/c.gif?DI=4050&did=1&t=">>html>>p;did=1&t=">=">