Delphi ошибка при обращении к реестру ole

Can anyone throw any light on an apparent partial incompatibility between TLibImp in Delphi 7and Win7 64-bit? Or suggest a less long-winded work-around than the one below?

I realise D7 is a bit long in the tooth, btw, but otherwise its IDE seems to behave faultlessly in Win7, which I suppose is a testament to MS’s efforts on backwards compatibility.

Looking into another SO question earlier, I tried to use it to import ActiveDS.Tlb from WindowsSysWOW64 using Project | Import Type library, but got an «Error accessing the OLE registry» error. I got the same error trying the copy in System32. Trying to import ActiveDS.Dll from both places I got «Error loading type library» instead.

I tried all the things which people say in the MS communities to try (Run Delphi as Administrator, Disable UAC, etc) and which David Heffernan told me (correctly) that I needn’t do when I ran into the «Error accessing the OLE registry» error when I mistakenly tried to import a type library into XE4 the wrong way.

Otoh, on Win7 64-bit, D7 imports the type library for Adobe Acrobat and many others without complaint.

I managed to work around the problem by importing the ActiveDS.Tlb using XE6 and editing out the unit namespace prefixes, fwiw.

Also, I seem to recall but can’t currently find a fix for one of the supplied units (ComObj maybe) for D5/D7
to avoid getting this error when a Delphi application started up which was caused by something like a problem in the way the COM object factory was initialized. But unfortunately, unlike some of the other Delphi utilities like TRegSvr, the source for TLibImp isn’t supplied

Вопрос:

Может ли кто-нибудь пролить свет на кажущуюся частичную несовместимость между TLibImp в Delphi 7 и Win7 64-бит? Или предложите менее продолжительный рабочий ход, чем тот, который приведен ниже?

Я понимаю, что D7 немного длинный в зубе, кстати, но в противном случае его IDE, кажется, ведет себя безупречно в Win7, что, я полагаю, является свидетельством усилий MS по обратной совместимости.

Изучая другой вопрос SO ранее, я попытался использовать его для импорта ActiveDS.Tlb из WindowsSysWOW64 с помощью Project | Импортировать библиотеку типов, но получил ошибку “Ошибка доступа к реестру OLE”. Я получил ту же ошибку при попытке копирования в System32. Пытаясь импортировать ActiveDS.Dll из обоих мест, я получил вместо этого “Ошибка загрузки библиотеки типов”.

Я пробовал все, что люди говорят в сообществах MS, чтобы попробовать (запустить Delphi как администратор, отключить UAC и т.д.), И Дэвид Хеффернан сказал мне (правильно), что мне не нужно делать, когда я столкнулся с “Ошибка доступа к OLE реестра “, когда я ошибочно попытался импортировать библиотеку типов в XE4 неправильно.

Otoh, на Win7 64-бит, D7 импортирует библиотеку типов для Adobe Acrobat и многих других без жалобы.

Мне удалось обойти проблему, импортировав ActiveDS.Tlb с помощью XE6 и отредактировав префикс пространства имен единиц, fwiw.

Кроме того, я, кажется, помню, но в настоящее время не могу найти исправление для одного из поставляемых модулей (возможно, ComObj) для D5/D7, чтобы избежать получения этой ошибки при запуске приложения Delphi, которое было вызвано чем-то вроде проблемы на пути фабрика COM-объектов была инициализирована. Но, к сожалению, в отличие от некоторых других утилит Delphi, таких как TRegSvr, источник для TLibImp не предоставляется

Лучший ответ:

Здесь нечего сказать. Импортирование библиотеки типов – это повторяющаяся проблемная область. Иногда старые версии Delphi будут импортировать библиотеки, когда новые версии не будут. И иногда наоборот, как вы столкнулись. Импортер библиотеки типов имеет ошибки, которые длинны и коротки.

Ваш обходной путь является наиболее эффективным способом решения таких проблем. Нет смысла подавать отчет о контроле качества, поскольку проблема исправлена в последней версии.

3 / 3 / 1

Регистрация: 09.09.2013

Сообщений: 116

1

12.10.2016, 16:41. Показов 4442. Ответов 9


Студворк — интернет-сервис помощи студентам

Ребят, как установить WMI? Очень много облазил, но вот установки не нашёл. Делал import library Windows/System32/wbem/файл.tlb. Пишет ошибку: Ошибка при обращении к реестру OLE. Как же всё таки установить магическую штуку WMI?



0



5089 / 4103 / 1026

Регистрация: 29.08.2013

Сообщений: 26,008

Записей в блоге: 3

12.10.2016, 17:01

2



0



3 / 3 / 1

Регистрация: 09.09.2013

Сообщений: 116

12.10.2016, 17:09

 [ТС]

3

Цитата
Сообщение от qwertehok
Посмотреть сообщение

Как я понимаю, можно тупо к нему присоединиться ?



0



5089 / 4103 / 1026

Регистрация: 29.08.2013

Сообщений: 26,008

Записей в блоге: 3

12.10.2016, 17:17

4

Цитата
Сообщение от alex2131
Посмотреть сообщение

Как я понимаю, можно тупо к нему присоединиться ?

ДА!!



0



alex2131

3 / 3 / 1

Регистрация: 09.09.2013

Сообщений: 116

13.10.2016, 22:10

 [ТС]

5

Разобрался с подключением и классами, не могу найти реализацию через Delphi. Код есть, вот как-то у них не понятно написан, не могу разобраться, может кто помочь?

Добавлено через 1 час 31 минуту

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var objSWbemLocator, List, List2,list3 : Variant;
 i: integer;
begin
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
if not (TVarData(objSWbemLocator).VType = varEmpty)
   then ShowMessage('OK');
   list:= objSWbemLocator.ConnectServer('.', 'rootCIMV2','', '', '', '') ;
   list2:= list.ExecQuery('SELECT * FROM Win32_Processor');
   i:= list2.Count;
   ShowMessage(IntToStr(i));
   for i := 0 to list2.Count - 1 do
     begin
      list3 := list2.Item[Name];
      ShowMessage(List3.Name) ;
     end;
end;

Пишет общий сбой, в чем проблема?



0



97 / 97 / 25

Регистрация: 25.04.2016

Сообщений: 525

14.10.2016, 00:57

6

А так импортировать пробовали?
Не знаю, что имел ввиду qwertehok, под «присоединиться». Т.к. его ссыль ведет на описание для WSH.
Основной порядок начала работы обычно такой:

Итак, начнём с того, что нам необходимо сделать перед тем, как непосредственно начать использовать мощь технологии WMI в своих программах:

установить систему Windows 2000 или NT 4.0 SP4 и выше;
установить Microsoft Internet Explorer (IE) 5.0 и выше;
установить WMI SDK;

После того, как вы установили WMI SDK, импортируйте следующие библиотеки типов:

Active DS Type Library (Version 1.0)
Microsoft WMI Scripting v1.1 Library (Version 1.1)

Миниатюры

Установка WMI
 

Установка WMI
 



0



5089 / 4103 / 1026

Регистрация: 29.08.2013

Сообщений: 26,008

Записей в блоге: 3

14.10.2016, 08:41

7

Цитата
Сообщение от MyEternity
Посмотреть сообщение

Основной порядок начала работы обычно такой:

ни фига подобного

Цитата
Сообщение от alex2131
Посмотреть сообщение

Пишет общий сбой, в чем проблема?

возьмите работающий пример



0



97 / 97 / 25

Регистрация: 25.04.2016

Сообщений: 525

14.10.2016, 12:38

8

Цитата
Сообщение от qwertehok
Посмотреть сообщение

возьмите работающий пример

Приведите работающий пример, который не потребует ничего добавлять в Uses, и не потребует никаких дополнительный MagWmi и пр. компонент.

Я спрашиваю для себя в том числе — т.к. самому стало интересно)



0



5089 / 4103 / 1026

Регистрация: 29.08.2013

Сообщений: 26,008

Записей в блоге: 3

14.10.2016, 12:56

9

Цитата
Сообщение от MyEternity
Посмотреть сообщение

который не потребует ничего добавлять в Uses

и который не требует писать код?

Цитата
Сообщение от MyEternity
Посмотреть сообщение

Приведите работающий пример

воспользуйся поиском по форуму

ЗЫ смотри сюда
https://theroadtodelphi.com/wm… e-creator/



0



MyEternity

97 / 97 / 25

Регистрация: 25.04.2016

Сообщений: 525

14.10.2016, 13:48

10

Лучший ответ Сообщение было отмечено alex2131 как решение

Решение

Цитата
Сообщение от qwertehok
Посмотреть сообщение

и зачем WMI устанавливать?
http://www.script-coding.com/WMI.html

Цитата
Сообщение от qwertehok
Посмотреть сообщение

>>Как я понимаю, можно тупо к нему присоединиться ?
>>ДА!!

Мой вопрос был связан с этими постами. Ответа на вопрос я так и не получил.
Спасибо и на этом

Добавлено через 17 минут
ТС, qwertehok, был прав. Можно и без импорта обойтись.
Только что покопался по https://github.com/RRUZ/wmi-delphi-code-creator, нашел там пример:

Delphi
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
{$APPTYPE CONSOLE}
 
uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;
 
 
 
// The Win32_DiskDrive class represents a physical disk drive as seen by a computer running the Win32 operating system. Any interface to a Win32 physical disk drive is a descendent (or member) of this class. The features of the disk drive seen through this object correspond to the logical and management characteristics of the drive. In some cases, this may not reflect the actual physical characteristics of the device. Any object based on another logical device would not be a member of this class.
// Example: IDE Fixed Disk.
 
procedure  GetWin32_DiskDriveInfo;
const
  WbemUser            ='';
  WbemPassword        ='';
  WbemComputer        ='localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'rootCIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Writeln(Format('DeviceID    %s',[String(FWbemObject.DeviceID)]));// String
 
    Writeln('');
    FWbemObject:=Unassigned;
  end;
end;
 
 
begin
 try
    CoInitialize(nil);
    try
      GetWin32_DiskDriveInfo;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode])); 
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;      
end.



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

14.10.2016, 13:48

10

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    !
    user posted image

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

    Соблюдайте общие правила форума

    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как запустить программу/файл? (и дождаться ее завершения)
    5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры — внедрение в удаленное адресное прстранство)
    … (продолжение следует) …


    Внимание:
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки — бан.
    Мат в разделе — бан на три месяца…


    Полезные ссылки:
    user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


    Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

    >
    Не регистрируется COM server

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    28.05.11, 07:16

      Delphi 2010. Win 7 x64.

      Создаю новый проект. Добавляю в него COM object. Все по дефолту, указываю только имя класса.
      Нажимаю Run -> Register ActiveX server. Компилится.
      Появляется окошко:
      Successfully registered ActiveX Server, ‘M:TZtestProject1.exe’

      и сразу же за ним еще одно с мессагой:
      Прекращена работа программы «Project1.exe»

      И потом появляется еще одно окно:

      Exception EOleSysError in module Project1.exe at 000A4C61.

      Ошибка при обращении к реестру OLE.

      Комп перезагружал. Avast отключал.

      Сервер в exeшнике.

      Делаю:
      Z:>com_srv.exe /RegServer

      В xp sp2 все ок.

      В семерке тоже самое. Ошибка при обращении к реестру OLE.

      Что за проблема? Кто-нибудь сталкивался?


      Gonarh



      Сообщ.
      #2

      ,
      28.05.11, 10:07

        Нужны права админа. Запускай регистрацию от админской учетки

        Сообщение отредактировано: Mr. Gonarh — 28.05.11, 10:09

        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

        0 пользователей:

        • Предыдущая тема
        • Delphi: Система, Windows API
        • Следующая тема

        Рейтинг@Mail.ru

        [ Script execution time: 0,0276 ]   [ 16 queries used ]   [ Generated: 3.06.23, 23:55 GMT ]  

        Please Sign up or sign in
        to vote.

        0.00/5 (No votes)

        See more:

        Delphi

        I have problems when i try to insert a ocx control in delphi XE. this present me the following error —> Error accessing the OLE registry

        Posted 20-Apr-14 17:59pm

        nelson_fonseca

        Add a Solution

        Comments

        [no name]
        21-Apr-14 10:35am

           

        Well based on the enormous amount of information that you have given us, I would say that the OCX is not registered on the system, or you do not have permission to access the registry.


        This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

        Понравилась статья? Поделить с друзьями:
      • Delphi ошибка unable to create process
      • Delphi ошибка e2029
      • Delphi не выводить сообщение об ошибке
      • Delphi генерация ошибки
      • Delphi вывод ошибок