![]() |
Реестр(х32) и WOW6432Node
Доброго всем времени суток!!!
Проблема я бы сказал глобальна не с легка (боюсь и на этом форуме 15 Кб текста в одно сообщение не влезут). Поэтому - если Вас не не затруднит - ознакомьтесь с ней здесь . Заранее благодарен |
Привет всем Ышо раз!!!
Глобальная трабла (на языке его Высочества Pascal [что подданный её Величества Delphi]) разрешилась "самостийно" (без вмешательства Delphi-программеров), но небольшой вопросец - остался (потому как он ближе к "Виндовцам", чем к "Дэлфийцам - позволю себе процетировать оного): //====предисловия ради: ОСь ХРюша Х64 Выкопал как-то на бескрайних просторах то-ли Гугла, то-ли Тындекса *.reg_файл приблизительно следующего содержания: ...... ;Добавление в контекстное меню "Мой компьютер" пункта "Диспетчер Устройств" [HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Диспетчер Устройств\command] @="%SystemRoot%\system32\mmc.exe /s %SystemRoot%\system32\devmgmt.msc" ...... {и тд тп (итого 5 пунктов, но остальные вродь как не интересуют - моя прога отрабатывает их досконально)} и прочитав славяноязычные REMарки... - ХОЧУ!!! -> дубльклик по нему -> Добавить данные в реестр...-> Данные успешно внесены...-> и ... - т и ш и н а... Ну то что пункты не появились в меню - коню понятно: РегЕдит показал, что не то чтобы значения не прописались, а даже вышеуказанные ключи НЕ создались... Нууу!!! - думаю: я его Щааа (а тут, я извиняюсь - его Высочество Pascal - цитата (меня же самого - "плагиат") с исходного форума [но попытаюсь "перевести"]): Код:1 Reg:= TRegistry.Create;...создаём переменную класса TRegistry, обладающую методами и свойствами(откр/закр, читать/писать, "добыть" данные, тип и тд и тп Reg.RootKey:= HKEY_CLASSES_ROOT;... тут небольшое отличие от *.reg и *.cmd If Form1.DevMan.Checked Then... если "птичка" Диспетчер Оборудования юзверем установлена, то begin Reg.OpenKey('CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Диспетчер Оборудования\command\', True); ...открываем ключ(CLSID\....) - (, True - если не сущ - создаём, False - просто читаем [создать - не можем]) Reg.WriteExpandString('', '%SystemRoot%\system32\mmc.exe /s %SystemRoot%\system32\devmgmt.msc'); ... пишем значение КЛЮЧА (НЕ параметра) Reg.CloseKey; ... Закрываем ключ - больше не нужен; end; и... Как ни парадоксально, но опять тишина... Тады эксперименту ради "заслал" (опять-таки на Pascalе) в тот же ключ значение:= UFO 007+999, а РегЕдит выудил это значение там куда его система отрефлектила: в той же ветке(HKCR) и почти том же ключе, но с небольшой вставочкой "WOW6432Node" в районе CLSID - щас уже точно не помню потому что благодаря нагугленному Код:2 Reg64:= TRegistry.Create(KEY_ALL_ACCESS OR $0100); //(разница с Код:1 - ощущается?) И вот тут Reg64 сделал (своё дело) то, что мне было нужно... (для остальных 4-х опций) ,но DevMan Один Х...н - не работает ... И детальный "разбор полётов" (тот же РегЭдит) показал, что мы писали: Reg.WriteExpandString('', '%SystemRoot%\system32\mmc.exe /s %SystemRoot%\system32\devmgmt.msc'); , а читаем: ...stemRoot%\ S Y S W O W 6432\mmc.exe!!!... хотя в вышеобматюканной папке одноимённый файл и проживает, но НЕ РАБОТАЕТ - пока не поправишь ручками на \system32\... Вот тут и вызревает САМ ВОПРОС (вернее 2): что происходит (в этот момент - и почему) и само главно - как эту хрень победить (чтоб работало автоматом - типа из под RunOnceEx [или без Ех - хоть из под Start\Programs\Autorun]??? Заранее - благодарен. |
Цитата:
|
СтопАнце - ток ща доглядел - мож не WriteExpandString, а просто WriteString??? - Ща проверю...
yurfed, Сорри - цитировать (по ходу движок форума не умеет) окромя как копипастить - не получается, но... ============================================================ а чего вы в ROOT полезли. Это виртуальная ветка. Её нет физически. ========================================================== - эт не я полез - вот исходник целиком: (с того же дельфийского форума) Код: извиняюсь что это не есть код от Его Величества Pascalя - но чтоб Админ про тэги не ругался: ;Добавление в контекстное меню "Мой компьютер" пункта "Диспетчер Устройств" [HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Диспетчер Устройств\command] @="%SystemRoot%\system32\mmc.exe /s %SystemRoot%\system32\devmgmt.msc" ;Добавление в контекстное меню "Мой компьютер" пункта "Редактор Реестра" [HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Редактор Реестра\command] @="Regedit.exe" ;Добавление в контекстное меню "Мой компьютер" пункта "Диспетчер задач" [HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Диспетчер Задач\command] @="taskmgr" ;Добавление в контекстное меню "Мой компьютер" пункта "Установка и удаление программ" [HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Установка и Удаление программ\command] @="control appwiz.cpl" Код:/end при чём должен я Вам заметить для 3-х последних пунктов Мену - виртуальная ветка очень даже рельно прописывается (тут надо заметить - не из *.reg(что Вы видите выше), а из моего *.exe (повторюсь - собака ПОрыЛАСЬ в х64 - под х32 мож и *.рег работает: не на ком проверить) |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Огромное всем СПАСИБО!!!! |
Цитата:
|
Время: 08:22. |
Время: 08:22.
© OSzone.net 2001-