Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[54.224.52.210] |
|
Сообщ.
#1
,
|
|
|
Всем привет.
Столкнулся с проблемой. Мне нужно запилить в инсталятор с помощью InstallShield 12, такую фичу: Есть SharePoint разных версий. В зависимости от версии он ставится по определенному пути. В общем сделал я у себя CustomAction, и наваял скрипт, который должен узнавать по какому пути расположен SharePoint, и записывать его местоположение в определенную проперти: function DetectSharePointDir(hMSI) // To Do: Declare local variables. begin SetSharePointInfoToProperty(hMSI, "SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\12.0", "Version", "SHAREPOINT_VERSION"); SetSharePointInfoToProperty(hMSI, "SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\12.0", "SharePoint", "SHAREPOINT_INSTALLED"); SetSharePointInfoToProperty(hMSI, "SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\12.0", "Location", "SHAREPOINTDIR"); SetSharePointInfoToProperty(hMSI, "SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\14.0", "Version", "SHAREPOINT_VERSION"); SetSharePointInfoToProperty(hMSI, "SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\14.0", "SharePoint", "SHAREPOINT_INSTALLED"); SetSharePointInfoToProperty(hMSI, "SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\14.0", "Location", "SHAREPOINTDIR"); SetSharePointInfoToProperty(hMSI, "SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\15.0", "Version", "SHAREPOINT_VERSION"); SetSharePointInfoToProperty(hMSI, "SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\15.0", "SharePoint", "SHAREPOINT_INSTALLED"); SetSharePointInfoToProperty(hMSI, "SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\15.0", "Location", "SHAREPOINTDIR"); end; function SetSharePointInfoToProperty(hMSI, szKey, szName, szProperty) NUMBER nvType, nvSize, nResult; STRING szSharePointProperty; begin RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); nResult = RegDBGetKeyValueEx("SOFTWARE\\Microsoft\\Shared Tools\\Web Server Extensions\\15.0", "Location", nvType, szSharePointProperty, nvSize ); //! Вот это просто для теста MessageBox(FormatMessage(nResult), SEVERE); if (RegDBKeyExist(szKey) == 1) then if (RegDBGetKeyValueEx(szKey, szName, nvType, szSharePointProperty, nvSize) == 0) then MsiSetProperty(hMSI, szProperty, szSharePointProperty); endif; endif; end; Так вот возникла проблема с функцией RegDBGetKeyValueEx - она мне возвращает ошибку аля "Файл не найден", т.е. как я понимаю она не может вычитать из реестра значение нужной мне опции в реестре. Хотя RegDBKeyExist - выполняется без проблем. Все эти значения в реестре существуют. Что я делаю не так? Спасибо. Добавлено Хотя вот сейчас попробовал из примера: nResult = RegDBGetKeyValueEx("Software\\Microsoft\\Windows NT\\CurrentVersion","RegisteredOwner",nvType,svRegisteredOwner,nvSize); Работает. Почему она тогда не хочет мое значение считывать? В чем косяк то? В реестре реально по вышеозвученным путям все есть. |
Сообщ.
#2
,
|
|
|
В общем вроде разобрался. Проблема была в том, что нужно было поставить следующую опцию, перед чтением реестра:
... REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY; if (RegDBKeyExist(szKey) == 1) then if (RegDBGetKeyValueEx(szKey, szName, nvType, szSharePointProperty, nvSize) == 0) then ... Но теперь возникла другая проблема, почему то записывается путь Program Files, а IS показывает Program File(x86) |
Сообщ.
#3
,
|
|
|
Разобрался.
|