Come ottenere il percorso delle cartelle speciali per una DLL di migrazione

Traduzione articoli Traduzione articoli
Identificativo articolo: 241733 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

Durante l'aggiornamento da Windows 95 o Windows 98 a Windows 2000 Professional, una DLL di migrazione desideri accedere a cartelle speciali, ad esempio la cartella menu Start o la cartella Desktop. Una DLL di migrazione non pu˛ presumere che queste cartelle predefinite esistono percorsi. In alternativa, Ŕ necessario utilizzare SHGetSpecialFolderPath o SHGetFolderPath.

Informazioni

SHGetSpecialFolderPath funziona solo in Windows 95 se Internet Explorer 4.0 Ŕ installato con l'aggiornamento desktop. In Windows 2000, SHGetSpecialFolderPath sempre funzionerÓ. In entrambi i casi, tuttavia, Ŕ consigliabile utilizzare la nuova API SHGetFolderPath, Ŕ un superset di SHGetSpecialFolderPath. Per utilizzare SHGetFolderPath in Windows 95 o Windows 98, Ŕ necessario ridistribuire il file SHFolder.dll along with la DLL di migrazione.

╚ possibile ottenere SHFolder.dll da pi¨ recente di Platform SDK. Per scaricare Platform SDK, Ŕ necessario vedere il seguente sito Web:
http://www.microsoft.com/msdownload/platformsdk/setuplauncher.htm
Quando si installa Platform SDK, assicurarsi di installare i componenti ridistribuibili e l'ambiente di generazione. Inoltre, scegliere di integrare Platform SDK con Microsoft Visual c ++ quando richiesto. Questa operazione Ŕ necessaria a causa del file SHFolder.h che Ŕ necessario. Una volta installato Platform SDK, cercare la cartella di installazione il file ridistribuibile SHFolder.exe eseguibile. Questo file Installa SHFolder.dll e tutti gli altri aggiornamenti che sono necessari per l'esecuzione in Windows 95 o Windows 98. Questo file eseguibile deve essere eseguito nel computer dell'utente quando l'utente posiziona la DLL di migrazione del computer. Pu˛ inoltre essere installato durante l'installazione dell'applicazione.

Il codice riportato di seguito viene illustrato come ottenere un puntatore all'API SHGetFolderPath:
#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;
}
				

Nell'esempio di codice riportato di seguito viene illustrato un utilizzo possibile di questa funzione. Durante l'aggiornamento a Windows 2000, un'applicazione pu˛ contenere un programma specifiche di Windows 2000 o di un utilitÓ che richiede un collegamento nella cartella programmi dal menu di avvio dell'applicazione. Dopo aver copiato il nuovo programma al computer, Ŕ possibile che la DLL di migrazione aggiungere un collegamento al menu di avvio dell'utente. Per un'impostazione per singolo utente, la funzione di MigrateUserNT Ŕ il modo migliore per eseguire questa operazione.

La funzione riportata di seguito accetta tre parametri. Il primo parametro Ŕ il percorso eseguibile di destinazione. Il secondo parametro Ŕ una descrizione. Il parametro finale Ŕ una sottocartella che verrÓ creata nella cartella programmi del menu di avvio . Questo Ŕ il percorso in cui il collegamento verrÓ creato.
#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;
}
				
Fare riferimento alla documentazione per SHGetSpecialFolderPath e SHGetFolderPath per determinare gli altri tipi di cartelle speciali che Ŕ possono ottenere queste funzioni. Si noti nell'esempio che CoInitialize e CoUnitialize vengano chiamati all'interno di questa funzione. Se COM viene utilizzata nelle altre funzioni, queste chiamate devono essere spostate funzione DllMain della DLL di migrazione. Chiamata a CoInitialize per la notifica DLL_PROCESS_ATTACH e CoUninitialize per la notifica DLL_PROCESS_DETACH.

Riferimenti

Per ulteriori informazioni sulle DLL di migrazione, vedere l'argomento che segue in MSDN Library:
Platform SDK; servizi di gestione; installazione; migrazione-estensione interfaccia

ProprietÓ

Identificativo articolo: 241733 - Ultima modifica: giovedý 1 marzo 2007 - Revisione: 3.4
Le informazioni in questo articolo si applicano a:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 98 Standard Edition
  • Microsoft Windows 95
Chiavi:á
kbmt kbfaq kbhowto kbmigrate kbsetup KB241733 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 241733
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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