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

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
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
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: 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

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 241733 - Ultima revisione: 12/05/2015 15:55:23 - Revisione: 3.4

Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional Edition, Microsoft Windows 98 Standard Edition, Microsoft Windows 95

  • kbnosurvey kbarchive kbmt kbfaq kbhowto kbmigrate kbsetup KB241733 KbMtit
Feedback