Jak získat umístění speciální složky DLL migrace

Překlady článku Překlady článku
ID článku: 241733 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Během inovace systému Windows 95 nebo Windows 98 na systém Windows 2000 Professional přenesení DLL chtít složek speciální přístup, například složky nabídky Start nebo složku plocha. Přenesení DLL nelze předpokládat tyto složky neexistují ve výchozím umístění. Místo toho by měl použít, SHGetSpecialFolderPath nebo SHGetFolderPath.

Další informace

Pokud je nainstalován Internet Explorer 4.0 s aktualizací plochy bude SHGetSpecialFolderPath pouze pracovat v systému Windows 95. V systému Windows 2000 bude vždy pracovat SHGetSpecialFolderPath. V obou případech je však vhodné použít nové API SHGetFolderPath, což je nadmnožina SHGetSpecialFolderPath. Chcete-li použít SHGetFolderPath v systémech Windows 95 nebo Windows 98, musí distribuují soubor SHFolder.dll spolu s přenesení DLL.

SHFolder.dll získat z nejnovější Platform SDK. Stáhnout Platform SDK, naleznete na následujícím webu:
http://www.microsoft.com/msdownload/platformsdk/setuplauncher.htm
Instalace Platform SDK, zkontrolujte instalaci redistribuovatelné součásti a sestavení prostředí. Také zvolit integrovat Microsoft Visual C++ výzvy Platform SDK. To je nezbytné z důvodu SHFolder.h souboru, který je nutný. Po instalaci Platform SDK vyhledat instalační složku redistributable spustitelný SHFolder.exe. Tento soubor nainstaluje SHFolder.dll a všechny aktualizace, které jsou potřebné k jeho spuštění v systému Windows 95 nebo Windows 98. Spustitelný soubor by měl být spouštěn v počítači uživatele, když uživatel umístí přenesení DLL v počítači. Lze ji také nainstalovat během instalace aplikace.

Získání ukazatele rozhraní API SHGetFolderPath demonstruje následující kód:
#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;
}
				

Následující ukázkový kód demonstruje jedno možné použití této funkce. Během upgradu na systém Windows 2000 může aplikace obsahovat specifické pro systém Windows 2000 program nebo nástroj vyžaduje zástupce ve složce Programy nabídky Start aplikace. Po zkopírování nového programu do počítače přenesení DLL přidání zástupce do nabídky Start uživatele. Pro nastavení za uživatele funkce MigrateUserNT je nejvhodnější místo provedení tohoto úkolu.

Následující funkce trvá tři parametry. První parametr je cesta k cílové spustitelné. Druhý parametr je popis. Konečné parametr je podsložce vytvořené ve složce Programy nabídky Start. Je to, kde bude vytvořen zástupce.
#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;
}
				
Naleznete v dokumentaci pro SHGetSpecialFolderPath a SHGetFolderPath určit další typy těchto funkcí lze získat zvláštní složky. Poznámka v příkladu v rámci této funkce se nazývají CoInitialize a CoUnitialize. COM je použit v jiných funkcí, mohou být tyto volání přesunuty do funkci DllMain DLL migrace. Pro upozornění DLL_PROCESS_DETACH volání CoInitialize pro DLL_PROCESS_ATTACH oznámení a CoUninitialize.

Odkazy

Další informace o DLL migrace naleznete v tématu následující v knihovně MSDN:
Platformu SDK služby; instalace; rozhraní rozšíření Migration

Vlastnosti

ID článku: 241733 - Poslední aktualizace: 1. března 2007 - Revize: 3.4
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 98 Standard Edition
  • Microsoft Windows 95
Klíčová slova: 
kbmt kbfaq kbhowto kbmigrate kbsetup KB241733 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:241733

Dejte nám zpětnou vazbu

 

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