Как получить расположение специальных папок для DLL миграции

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:241733
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Аннотация
При обновлении Windows 95 или Windows 98 до Windows 2000 Professional, Библиотека миграции может потребоваться доступ к специальные папки, такие как Начало меню папки или папки рабочего стола. Библиотека миграции нельзя предполагать, эти папки по умолчанию существует мест. Вместо этого следует использовать SHGetSpecialFolderPath или SHGetFolderPath.
Дополнительная информация
SHGetSpecialFolderPath будет работать только под управлением Windows 95 при установки Internet Explorer 4.0 с рабочего стола. В Windows 2000 SHGetSpecialFolderPath всегда будет работать. Однако в обоих случаях лучше использовать новый интерфейс API SHGetFolderPath, который включает в себя SHGetSpecialFolderPath. Использование SHGetFolderPath в Windows 95 или Windows 98, необходимо распространять файл SHFolder.dll вместе с DLL миграции.

SHFolder.dll можно получить последнюю версию пакета Platform SDK. Для загрузки пакета Platform SDK, просмотра веб-узла:При установке пакета Platform SDK, убедитесь, что установить свободно распространяемые компоненты и среду сборки. Кроме того выберите для интеграции с Microsoft Visual C++ в ответ на запрос Platform SDK. Это необходимо из-за необходимого файла SHFolder.h. После установки пакета Platform SDK поиск папки установки распространяемого исполняемый файл SHFolder.exe. Этот файл устанавливает SHFolder.dll и другие обновления, необходимые для запуска Windows 95 или Windows 98. Этот исполняемый файл следует запускать на компьютере пользователя, когда пользователь наводит миграции библиотеки DLL на компьютере. Он может также устанавливаться во время установки приложения.

Следующий код демонстрирует получить указатель на интерфейс 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;}				

В следующем примере кода показан один из возможных способов использования этой функции. При обновлении до Windows 2000 приложение может содержать программу для Windows 2000 или служебной программы, требующей ярлык в приложении Начало Папка меню программы. После копирования новую программу на компьютер, Библиотека миграции можно добавить ярлык для пользователя Начало меню. Для настройки каждого пользователя, функция MigrateUserNT является наилучшим местом для выполнения этой задачи.

Приведенная ниже функция принимает три параметра. Первый параметр — это путь к целевой исполняемый файл. Второй параметр — это описание. Последний параметр – вложенную папку, которая будет создана в Начало Папка меню программы. Это происходит, где будет создан ярлык.
#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;}				
Обратитесь к документации по SHGetSpecialFolderPath и SHGetFolderPath для определения других типов специальных папок, которые могут получить эти функции. Обратите внимание, в примере, что внутри этой функции вызываются CoInitialize и CoUnitialize. Если COM используется в других функциях, следует переместить эти вызовы функции DllMain DLL миграции. Вызовите уведомление DLL_PROCESS_DETACH для уведомления DLL_PROCESS_ATTACH и CoUninitialize CoInitialize.
Ссылки
Дополнительные сведения о библиотеках DLL миграции содержатся в разделе, следующие в библиотеке MSDN:
Комплект разработчика Platform SDK; Службы управления; Программа установки; Интерфейс модуля миграции

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 241733 — последний просмотр: 12/05/2015 15:55:26 — редакция: 4.0

операционная система Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional Edition, Операционная система Microsoft Windows 95

  • kbnosurvey kbarchive kbFAQ kbhowto kbmigrate kbsetup kbmt KB241733 KbMtru
Отзывы и предложения