powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проверить, зарегистрирована dll в HKEY_CLASSES_ROOT или HKEY_CURRENT_USER
5 сообщений из 5, страница 1 из 1
Проверить, зарегистрирована dll в HKEY_CLASSES_ROOT или HKEY_CURRENT_USER
    #40116431
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня,

в процедуре инсталляции надо проверить - последняя регистрация была для всех пользователей или для конкретного. И если была для всех а теперь надо зарегистрировть на конкретного пользователя то сначала дерегистрировать для всех и потом регистрировать на конкретного пользователя.
Можно конечно просто посмотреть где в реестре зарегана эта библиотека и по прямому пути прочитать но если в будующем этот путь микрософт поменяет то это перестанет работать. Посоветуйте альтернативный метод который позволит учесть возможное изменение пути мелкософтом в будующем (а возможно и в прошлом, если в той же 8й или 7й винде путь отличается от 10й винды).

п.с. знаю про Side by Side сборки через манифест итп и в будующем в принципе так и планируется делать но в данном случае нужна быстрая правка в старом инсталляторе, на большую правку и тестирование время не хватит.

Спасибо.
...
Рейтинг: 0 / 0
Проверить, зарегистрирована dll в HKEY_CLASSES_ROOT или HKEY_CURRENT_USER
    #40116432
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о, Господи!
эта музыка будет вечной - он таки заменил батарейки! ©
...
Рейтинг: 0 / 0
Проверить, зарегистрирована dll в HKEY_CLASSES_ROOT или HKEY_CURRENT_USER
    #40116437
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
но если в будующем этот путь микрософт поменяет
Не поменяет. API для регистрации COM нет. Все лазят напрямую в реестр
...
Рейтинг: 0 / 0
Проверить, зарегистрирована dll в HKEY_CLASSES_ROOT или HKEY_CURRENT_USER
    #40116462
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
hlopotun
но если в будующем этот путь микрософт поменяет
Не поменяет. API для регистрации COM нет. Все лазят напрямую в реестр


вот упрощённая функция регистратии dll:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
function _RegisterComServer (DLLName: string): boolean;
type
  TRegProc = function: HResult; stdcall;
const
  RegProcName = 'DllRegisterServer'; { Do not localize }
var
  Handle: THandle;
  RegProc: TRegProc;
  FullPath: string;
begin

  if ExtractFilepath (Fullpath) = '' then
    Fullpath:= ExtractFilepath (ParamStr (0)) + Fullpath;

  if AnsiTextPos ('.DLL', Result) = 0 then
    Fullpath := Fullpath+ '.DLL';

  Handle := SafeLoadLibrary (Fullpath);
  if Handle <= HINSTANCE_ERROR then
    Result := False
    else
    try
      RegProc := GetProcAddress (Handle, RegProcName);
      Result := Assigned (RegProc);
      if Result then
        Result := RegProc = S_OK;
    finally
      FreeLibrary(Handle);
    end;
end;


а это для регистрации tlb:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function _LoadTypelib (DLL_TLB_Name: string; out tlib: ITypeLib): HResult;
var
  str: PWidechar;
  size: integer;
begin

  size := (length (DLL_TLB_Name) + 1) * 2;
  GetMem (str, size);
  try
    StringToWidechar (DLL_TLB_Name, str, size);
    Result := LoadTypelib (str, tlib);
  finally
    FreeMem (str);
  end;
end;


в обоих случаях напрямую работа с ветками не ведётся

также при дерегистрации:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
function _UnRegisterComServer (DLLName: string): boolean;
type
  TRegProc = function: HResult; stdcall;
const
  RegProcName = 'DllUnregisterServer'; { Do not localize }
var
  Handle: THandle;
  RegProc: TRegProc;
  FullPath: string;
begin
  if ExtractFilepath (Fullpath) = '' then
    Fullpath:= ExtractFilepath (ParamStr (0)) + Fullpath;

  if AnsiTextPos ('.DLL', Result) = 0 then
    Fullpath := Fullpath+ '.DLL';

  Handle := SafeLoadLibrary (Fullpath);
  if Handle <= HINSTANCE_ERROR then
    Result := False
    else
    try
      RegProc := GetProcAddress (Handle, RegProcName);
      Result := Assigned (RegProc);
      if Result then
        Result := RegProc = S_OK;
    finally
      FreeLibrary(Handle);
    end;
end;


а дерегистрировать tlb пока не разобрался.

по сути если откинуть проблему дерегистрации tlb нужно только определить где была зарегистрирована dll, tlb ранее
...
Рейтинг: 0 / 0
Проверить, зарегистрирована dll в HKEY_CLASSES_ROOT или HKEY_CURRENT_USER
    #40116468
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotunв обоих случаях напрямую работа с ветками не ведётся

Да щаззз... Ты что, никогда не заглядывал что делается в вызываемой тобой функции?..

Тогда и дальше не парься, а вызывай DllUnRegisterServer из той же библиотеки.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проверить, зарегистрирована dll в HKEY_CLASSES_ROOT или HKEY_CURRENT_USER
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]