Como obter a localização das pastas especiais para uma DLL de migração

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 241733
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sumário
Durante uma actualização a partir do Windows 95 ou Windows 98 para o Windows 2000 Professional, uma migração DLL querer acesso a pastas especiais, tais como a pasta do menu Iniciar ou a pasta Ambiente de trabalho. Um DLL de migração não é possível assumir que estas pastas existem predefinido localizações. Em vez disso, deve utilizar SHGetSpecialFolderPath ou SHGetFolderPath.
Mais Informação
SHGetSpecialFolderPath só funcionará no Windows 95 se o Internet Explorer 4.0 estiver instalado com a actualização do ambiente de trabalho. No Windows 2000, SHGetSpecialFolderPath sempre funcionará. No entanto, em ambos os casos, é melhor utilizar a nova API SHGetFolderPath, que é um superconjunto da SHGetSpecialFolderPath. Para utilizar SHGetFolderPath no Windows 95 ou Windows 98, tem de redistribuem o ficheiro SHFolder.dll juntamente com a DLL de migração.

Pode obter SHFolder.dll do Platform SDK mais recente. Para transferir o Platform SDK, consulte o seguinte Web site: Quando instalar o Platform SDK, certifique-se instalar os componentes redistribuíveis e o ambiente de compilação. Também escolher integrar o Microsoft Visual C++ quando lhe for pedido o Platform SDK. Isto é necessário porque do ficheiro SHFolder.h que é necessário. Depois de instalar o Platform SDK, procure a pasta de instalação de SHFolder.exe executável redistribuível. Este ficheiro instala SHFolder.dll e todas as outras actualizações que são necessários para que seja executado no Windows 95 ou Windows 98. Este ficheiro executável deve ser executado no computador do utilizador quando o utilizador coloca o DLL de migração no computador. Também pode ser instalado durante a configuração da aplicação.

O seguinte código demonstra como obter um apontador para SHGetFolderPath API:
#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;}				

O código de exemplo seguinte demonstra uma possível utilização desta função. Durante uma actualização para o Windows 2000, uma aplicação pode conter um programa específicas do Windows 2000 ou o utilitário que requer um atalho na pasta ' programas ' menu Iniciar a aplicação. Depois de copiar o novo programa para o computador, a DLL de migração pode adicionar um atalho ao menu Iniciar do utilizador. Para uma definição por utilizador, a função de MigrateUserNT é o melhor local para efectuar esta tarefa.

A função seguinte tem três parâmetros. O primeiro parâmetro é o caminho para o executável de destino. O segundo parâmetro é uma descrição. O parâmetro final é uma subpasta que será criada na pasta programas do menu Iniciar . Esta é onde o atalho será criado.
#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;}				
Consulte a documentação determinar os tipos de pastas especiais que estas funções podem obter SHGetSpecialFolderPath e SHGetFolderPath. Repare no exemplo que CoInitialize e CoUnitialize são denominados dentro desta função. Se for utilizada COM outras funções, estas chamadas devem ser movidas para DllMain função a DLL de migração. Chamar CoInitialize para a notificação de DLL_PROCESS_ATTACH e CoUninitialize da notificação DLL_PROCESS_DETACH.
Referências
Para mais informações sobre DLLs de migração, consulte o tópico seguinte na MSDN Library:
O Platform SDK serviços de gestão de programa de configuração; extensão de migração de interface

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 241733 - Última Revisão: 12/05/2015 15:55:25 - Revisão: 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 KbMtpt
Comentários