Меню

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

  • Remove From My Forums
  • Вопрос

  • Здравствуйте.

    На одной пользовательской машине используется две программы. Эти программы при запуске выполняет следующие действия:

    1) Проверяет значения реестра (я не знаю какие)

    2) Если значения реестра отличаются от необходимых то программа выставляет значения реестра такими какими они нужны для работы

    Проблема в том что программы изменяют одну и ту же часть реестра, и изменения этих значений реестра возможны только под администратором.

    То есть администратор может открывать обе программы без проблем. Но пользователь может открыть только одну программу, у второй при запуске появляется ошибка «ошибка при обращении к реестру OLE».

    Как вы понимаете я не могу дать пользователям права администратора. Я хотел бы дать права на изменения куста в реестре. Но я не знаю где находится куст OLE. Прошу помочь мне с этим вопросом.

    Заранее благодарен за ответы.

    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,0492 ]   [ 16 queries used ]   [ Generated: 28.01.23, 18:02 GMT ]  

        3 / 3 / 1

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

        Сообщений: 116

        1

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


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

        __________________
        Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



        0



        4716 / 3924 / 994

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

        Сообщений: 25,175

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

        12.10.2016, 17:01

        2



        0



        3 / 3 / 1

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

        Сообщений: 116

        12.10.2016, 17:09

         [ТС]

        3

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

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



        0



        4716 / 3924 / 994

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

        Сообщений: 25,175

        Записей в блоге: 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



        4716 / 3924 / 994

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

        Сообщений: 25,175

        Записей в блоге: 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



        4716 / 3924 / 994

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

        Сообщений: 25,175

        Записей в блоге: 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

        • #1

        Приветствую уважаемые гуру! Подскажите с ошибкой — при запуске приложения появляется сообщение

        Код:

        Exception EOleSysError in module CRYPTO2.exe at 0005B441.
        Ошибка при обращении к реестру OLE.

        Раньше такая ошибка не возникала. Комп с windows 7. Как решить помогите..

        image_95.jpg

        • #2

        У пользователя из под которого запускаете софт нет прав на реестр

        • #3

        Приветствую уважаемые гуру! Подскажите с ошибкой — при запуске приложения появляется сообщение

        Код:

        Exception EOleSysError in module CRYPTO2.exe at 0005B441.
        Ошибка при обращении к реестру OLE.

        Раньше такая ошибка не возникала. Комп с windows 7. Как решить помогите..

        Посмотреть вложение 112

        нет прав, либо не локальный админ пк либо отключите uac, либо что то блочит доступ в реестр например живность

        Вопрос по версии

        Аватара пользователя

        sannx

        Администратор
        Сообщения: 2305
        Зарегистрирован: 02 ноя 2011, 14:00
        Skype: sann-x
        Контактная информация:

        Re: Вопрос по версии

        Сообщение

        sannx » 25 дек 2015, 13:33

        Там версия Delphi XE. Примеров под Д7 и VC нет. Для Делфи любой версии примеры подправить не сложно будет.

        Dmitriy

        Сообщения: 1
        Зарегистрирован: 25 дек 2015, 15:32

        Re: Вопрос по версии

        Сообщение

        Dmitriy » 25 дек 2015, 16:02

        sannx писал(а):Там версия Delphi XE. Примеров под Д7 и VC нет. Для Делфи любой версии примеры подправить не сложно будет.

        Ага, пример то я подправил. Проект билдится, но при запуске вылетает с EOleSysError ‘Ошибка при обращении к реестру OLE’.

        Может кому пригодится:
        Кажется, что проблема не в версии Delphi. Проект из Example подправленный и отбилденный на Delphi 7 под Windows 7 64bit — вылетает (на этой самой Win7) с ошибкой указанной выше.
        Но, когда я взял exe-файл, полученный через Delphi7/Win7_64bit и запустил его на WinXP 32 bit, то этот exe-файл запустился без ошибок.
        При этом, оригинальный exe-файл «ExamplesDelphiChannelClientChannelClient.exe» из скачанного http://www.sprecord.ru/files/downloads/sdk22.zip работает и под WinXP 32bit и под Win7 64bit :)

        0 0 голоса
        Рейтинг статьи
        Подписаться
        Уведомить о
        guest

        0 комментариев
        Старые
        Новые Популярные
        Межтекстовые Отзывы
        Посмотреть все комментарии

        А вот еще интересные материалы:

      • Яшка сломя голову остановился исправьте ошибки
      • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
      • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
      • Delphi ошибка unsatisfied forward or external declaration
      • Delphi ошибка stack overflow