Gewusst wie: Abrufen des Speicherorts von Spezialordnern für eine Migration DLL

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

Zusammenfassung

Bei einer Aktualisierung von Windows 95 oder Windows 98 auf Windows 2000 Professional kann ein Migration DLL möchten, auf spezielle Ordner wie der Ordner Startmenü oder den Ordner Desktop zugreifen. Ein Migration-DLL kann nicht angenommen, dass diese Ordner in Speicherorte vorhanden. Sie sollten stattdessen SHGetSpecialFolderPath oder SHGetFolderPath verwenden.

Weitere Informationen

SHGetSpecialFolderPath funktioniert nur unter Windows 95, wenn Internet Explorer 4.0 mit dem desktop-Update installiert ist. Unter Windows 2000 funktioniert die SHGetSpecialFolderPath immer. Es ist jedoch in beiden Fällen sollten Sie die neue API SHGetFolderPath verwenden, ist eine Obermenge von SHGetSpecialFolderPath. SHGetFolderPath unter Windows 95 oder Windows 98 verwenden, müssen Sie die Datei SHFolder.dll along with Migration DLL weitergeben.

Sie können SHFolder.dll aus dem aktuellen Platform SDK abrufen. Zum Plattform-SDK downloaden finden Sie in den folgenden Website:
http://www.microsoft.com/msdownload/platformsdk/setuplauncher.htm
Wenn Sie im Plattform-SDK installieren, Sie unbedingt die verteilbaren Komponenten und der Buildumgebung installiert. Auch, wählen Sie aus, die im Platform SDK Integration in Microsoft Visual C++, wenn Sie dazu aufgefordert werden. Dies ist erforderlich aufgrund der SHFolder.h-Datei, die benötigt wird. Sobald das Platform SDK installiert ist, suchen Sie den Installationsordner verteilbare ausführbare SHFolder.exe. Diese Datei installiert SHFolder.dll und andere Updates, die für die Ausführung unter Windows 95 oder Windows 98 benötigt werden. Diese ausführbare Datei sollte auf dem Computer des Benutzers ausgeführt werden, wenn der Benutzer die Migration-DLL auf dem Computer platziert. Es kann auch während Setup Ihrer Anwendung installiert werden.

Der folgende Code veranschaulicht einen Zeiger auf SHGetFolderPath API beziehen:
#include <windows.h>
#include <shfolder.h>

PFNSHGETFOLDERPATHA GetFuncPtr_SHGetFolderPathA()
{
   static HMODULE hMod = NULL;
   PFNSHGETFOLDERPATHA pSHGetFolderPath = NULL;

   // Load SHFolder.dll only once
   if (!hMod)
      hMod = LoadLibrary("SHFolder.dll");

   if (hMod)
      // Obtain a pointer to the SHGetFolderPathA function
      pSHGetFolderPath = (PFNSHGETFOLDERPATHA)GetProcAddress(hMod, 
         "SHGetFolderPathA");

   return pSHGetFolderPath;
}
				

Der folgende Code veranschaulicht eine mögliche Verwendung dieser Funktion. Bei einer Aktualisierung auf Windows 2000 enthalten eine Anwendung, ein Windows 2000-spezifische Programm oder Dienstprogramm, das eine Verknüpfung in die Ordner im Menü der Anwendung Starten Programme erfordert. Nach dem das neue Programm an den Computer kopieren kann Migration DLL eine Verknüpfung zum Startmenü des Benutzers hinzufügen. Für eine Einstellung pro Benutzer ist die MigrateUserNT-Funktion am besten zum Ausführen dieser Aufgabe.

Die folgende Funktion akzeptiert drei Parameter. Der erste Parameter ist der Pfad zu der ausführbaren Zieldatei. Der zweite Parameter ist eine Beschreibung. Der letzte Parameter ist ein Unterordner, der im Start Menü Programmordner erstellt werden. Dies ist, in dem die Verknüpfung erstellt werden.
#include <windows.h>
#include <objbase.h>
#include <shlobj.h>
#include <shfolder.h>

HRESULT CreateUserStartMenuShortcut(LPSTR pszShortcutFile,
            LPSTR pszDescription, LPTSTR pszRelativeFolder)
{
   HRESULT hr;
   PFNSHGETFOLDERPATHA pSHGetFolderPath = NULL;
   TCHAR pszLink[MAX_PATH];
   BOOL bFound = FALSE;

   pSHGetFolderPath = GetFuncPtr_SHGetFolderPathA();

   // Find the current user's Start Menu Programs folder
   if (pSHGetFolderPath)
      bFound = SUCCEEDED(pSHGetFolderPath(NULL, CSIDL_PROGRAMS, 
                           NULL, SHGFP_TYPE_CURRENT, pszLink));

   if (bFound)
   {
      // Proceed to create the shortcut
      IShellLink *pIShellLink = NULL;
      IPersistFile *ppf = NULL;
      WCHAR pLinkUnicode[MAX_PATH];

      CoInitialize(NULL);

      // Get a pointer to the IShellLink interface.
      hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
                            IID_IShellLink, (void **)&pIShellLink);

      if (SUCCEEDED(hr))
      {
         // Get a pointer to IPersistFile interface for saving shortcut
         hr = pIShellLink->QueryInterface(IID_IPersistFile, (void **)&ppf);

         if (SUCCEEDED(hr))
         {   
            hr = pIShellLink->SetPath(pszShortcutFile);
            hr = pIShellLink->SetDescription(pszDescription);

            if (SUCCEEDED(hr))
            {
               // Add the target folder to the Start Menu Programs path
               lstrcat(pszLink, "\\");
               lstrcat(pszLink, pszRelativeFolder);
               lstrcat(pszLink, "\\");

               // Create the directory if it does not exist
               CreateDirectory(pszLink,NULL);

               // Add the file name for the shortcut
               lstrcat(pszLink, pszDescription);
               lstrcat(pszLink, ".lnk");

               // Convert string to Unicode, and call IPersistFile::Save()
               MultiByteToWideChar(CP_ACP, 0, pszLink, -1, pLinkUnicode, MAX_PATH);
               hr = ppf->Save(pLinkUnicode, TRUE);
            }
            ppf->Release();
         }
         pIShellLink->Release();
      }
      CoUninitialize();
   }

   return hr;
}
				
Finden Sie in der Dokumentation zur SHGetSpecialFolderPath und SHGetFolderPath zu anderen Typen von Spezialordnern zu ermitteln, die diese Funktionen beziehen können. Beachten Sie in dem Beispiel, dass in dieser Funktion CoInitialize und CoUnitialize aufgerufen werden. Wenn COM in anderen Funktionen verwendet wird, sollten diese Aufrufe an die Migration-DLL DllMain-Funktion verschoben werden. Aufrufen von CoInitialize für die Benachrichtigung DLL_PROCESS_ATTACH und CoUninitialize für die DLL_PROCESS_DETACH-Benachrichtigung.

Informationsquellen

Weitere Informationen zu Migrations-DLLs finden Sie unter folgenden in der MSDN Library:
Plattform-SDK; Management Services; Setup; Migration-Extension Interface

Eigenschaften

Artikel-ID: 241733 - Geändert am: Donnerstag, 1. März 2007 - Version: 3.4
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 98 Standard Edition
  • Microsoft Windows 95
Keywords: 
kbmt kbfaq kbhowto kbmigrate kbsetup KB241733 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: 241733
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