Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Вопрос по библиотеке JEDI (модуль JclRegistry )

Ответить
Настройки темы
Delphi - [решено] Вопрос по библиотеке JEDI (модуль JclRegistry )

Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1158
Благодарности: 382

Профиль | Отправить PM | Цитировать


Изменения
Автор: Painkiller
Дата: 26-02-2016
Привет всем ! Столкнулся с такой проблемой . Нужно удалить ключ реестра со всеми подключами.
Код: Выделить весь код
HKEY_LOCAL_MACHINE\Software\Microsoft\WIMMount
Проблема на x64 системе , а у меня x32 приложения . Соответственно моя программа ищет этот в ключе Wow6432Node. Решения я нашёл не используя библиотеку JEDI так:
Скрытый текст

Код: Выделить весь код
procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create();
if IsWindows64=true then begin
Reg.Access := $100 or KEY_ALL_ACCESS;
end;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.KeyExists('\Software\Microsoft\WIMMount') then
Reg.DeleteKey('Software\Microsoft\WIMMount');
finally
Reg.Free;
end;end;

Всё работает и удаляется . Но хотелось бы обойтись средствами библиотеки JEDI
Скрытый текст

Набросал код :
Код: Выделить весь код
procedure TForm1.Button2Click(Sender: TObject);
var
RootKey: HKEY;
PathKEY:String;
 begin
if IsWindows64=true then begin
RegSetWOW64AccessMode(ra64Key);
end;
RootKey := HKEY_LOCAL_MACHINE;
PathKEY:='Software\Microsoft\WIMMount';
if not RegKeyExists (RootKey,PathKEY) then begin
Memo1.Lines.Add('- [ Ошибка ] Ключ не найден')
end else begin
Memo1.Lines.Add('[ ОК ] Ключ найден');
if not RegDeleteKeyTree (RootKey,PathKEY)then   begin
Memo1.Lines.Add('[ Ошибка ] Ключ не удалён')
end else begin
Memo1.Lines.Add('[ ОК ] Ключ удалён');
end;
end;
end;
end.

Ключ находит, но не удаляет =((( Что нужно ещё добавить ??? Помогите, плиз!

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]


Отправлено: 23:47, 24-02-2016

 

Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1158
Благодарности: 382

Профиль | Отправить PM | Цитировать


Цитата opel431:
3. Вы работаете в системе с отключенным UAC? »
Да , вот почему мне манифест не нужен, но я его всё равно его добавлял.

Цитата opel431:
А функция RegDeleteKeyTree, удаляет подключи! »
Если скомпилировать x64 приложения , то функция удаляет ключ с подключами без проблем .

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]


Отправлено: 18:13, 26-02-2016 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Цитата Painkiller:
Reg.Access := $100 or KEY_ALL_ACCESS; »
Давайте так, не гадать, а почитать, как работает перенаправление RegSetWOW64AccessMode. Посмотрите вот это https://msdn.microsoft.com/en-us/lib...29(VS.85).aspx и это http://blog.delphi-jedi.net/2010/08/...key-and-64bit/
У Вас какая версия и под какую платформу Вы создаете приложение? Будут затруднения, поставлю Delphi и посмотрю на практике.

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 26-02-2016 в 20:01.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:30, 26-02-2016 | #12


Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1158
Благодарности: 382

Профиль | Отправить PM | Цитировать


Цитата opel431:
У Вас какая версия и под какую платформу Вы создаете приложение? Будут затруднения, поставлю Delphi и посмотрю на практике. »
Ещё раз повторяю .Я создаю x32 приложения , но мне нужно, чтобы она работа и на x86 и на x64 . Всё работает кроме функции RegDeleteKeyTree. Если скомпилировать x64, то всё работает, удаляет ключ с подключами. RegDeleteKeyTree не работает если приложения скомпилировать x32. Вот в чём загвостка.

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]


Отправлено: 20:18, 26-02-2016 | #13


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Цитата Painkiller:
Ещё раз повторяю »
Ну вот, Вы уже с возмущением! У меня XE, компилятор только для платформы x32. Скиньте именно ваш проблемный ключ (.reg). Попробую воспроизвести проблему.

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Отправлено: 20:55, 26-02-2016 | #14


Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1158
Благодарности: 382

Профиль | Отправить PM | Цитировать


Цитата opel431:
Ну вот, Вы уже с возмущением! У меня XE, компилятор только для платформы x32. Скиньте именно ваш проблемный ключ (.reg). Попробую воспроизвести проблему. »
Вам показалось, вы тут единственный, который не раз мне помогал с delphi и на этот раз я на вас то и рассчитываю. Увы я самоучка и иногда не хватает опыта, здесь только на вас и рассчитывать можно. Причём о чудной библиотеке JEDI я узнал из вашего сообщения тут на форуме и в с ней знакомы лично.
Скомпилировал для двух платформ и вместе с рег файлом и исходником залил на яндекс диск тут
x64 удаляет , а x86 находит но не удаляет. =((

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]


Последний раз редактировалось Painkiller, 26-02-2016 в 21:56.


Отправлено: 21:44, 26-02-2016 | #15


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Цитата Painkiller:
Скомпилировал для двух платформ и вместе с рег файлом.... »
Вот это мне не нужно, мне покажите экспорт ключа из реестра, можно и Unit1 (выложите здесь, заключив в теги, ведь просматривают Ваше сообщение и другие). Все остальное лишнее, кроме того, тянет за собой хвост. Или "троян" или ложное срабатывание защиты - Trojan:Win32/Spursint.A.

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Отправлено: 23:12, 26-02-2016 | #16


Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1158
Благодарности: 382

Профиль | Отправить PM | Цитировать


Цитата opel431:
Вот это мне не нужно, мне покажите экспорт ключа из реестра, »
Код: Выделить весь код
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WIMMount]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WIMMount\1]
Цитата opel431:
Можно и Unit1 (выложите здесь, заключив в теги, ведь просматривают Ваше сообщение и другие). »
Скрытый текст

Код: Выделить весь код
unit Unit1;

interface

uses
JclSecurity,JclRegistry, JclSysInfo, Registry,Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;



type

  TForm1 = class(TForm)
    Button2: TButton;
    Memo1: TMemo;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
 {$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
RootKey: HKEY;
PathKEY:String;
 begin
RegSetWOW64AccessMode(raNative);
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(PChar('HKEY_LOCAL_MACHINE\Software\Microsoft\WIMMount')));
RootKey := HKEY_LOCAL_MACHINE;
PathKEY:='Software\Microsoft\WIMMount';
if not RegKeyExists (RootKey,PathKEY) then begin
Memo1.Lines.Add ('Ключ не найден ');
exit
end else begin
Memo1.Lines.Add('[ ОК ] Ключ найден');
if not RegDeleteKeyTree (RootKey,PathKEY)then   begin
Memo1.Lines.Add ('Ключ не удалён ');
exit
end else begin
Memo1.Lines.Add('[ ОК ] Ключ удалён');
end;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (CheckWin32Version(6, 0)) then
begin
   if IsPrivilegeEnabled('SeBackupPrivilege') then
      EnableProcessPrivilege(False, 'SeBackupPrivilege');
   if IsPrivilegeEnabled('SeRestorePrivilege') then
      EnableProcessPrivilege(False, 'SeRestorePrivilege');
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
if (CheckWin32Version(6, 0)) then
begin
   if not IsPrivilegeEnabled('SeBackupPrivilege') then
      EnableProcessPrivilege(True, 'SeBackupPrivilege');
   if not IsPrivilegeEnabled('SeRestorePrivilege') then
      EnableProcessPrivilege(True, 'SeRestorePrivilege');
end;
end;
end.

Цитата opel431:
Все остальное лишнее, кроме того, тянет за собой хвост. Или "троян" или ложное срабатывание защиты - Trojan:Win32/Spursint.A. »
А вот это у вас ложное срабатывания . У меня тут нет цели распространять вирусы. У вас случайно не Аваст или Авира ?
Результата virustotal 86.exe
Результата virustotal 64.exe

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]


Отправлено: 23:47, 26-02-2016 | #17


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Вижу Вы еще здесь. Попробуй те на платформе x32 RegSetWOW64AccessMode(raDefault);

Цитата Painkiller:
У вас случайно не Аваст или Авира ? »
"Казенный" - MSE

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Отправлено: 01:38, 27-02-2016 | #18


Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1158
Благодарности: 382

Профиль | Отправить PM | Цитировать


Цитата opel431:
Вижу Вы еще здесь. Попробуй те на платформе x32 RegSetWOW64AccessMode(raDefault); »
Ключ не найден, хоть он и существует. Я уже игрался с этим прежде чем сюда написать, то день просидел вчера , всё перепробовал.

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]


Отправлено: 01:42, 27-02-2016 | #19


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Цитата Painkiller:
всё перепробовал. »
У меня в XE удаляет.
Код
Код: Выделить весь код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    lbl1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses JclRegistry, JclSecurity, JclSysInfo;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  if (CheckWin32Version(6, 0)) then
  begin
    if not(IsPrivilegeEnabled('SeBackupPrivilege')) then
      EnableProcessPrivilege(True, 'SeBackupPrivilege');
    if not(IsPrivilegeEnabled('SeRestorePrivilege')) then
      EnableProcessPrivilege(True, 'SeRestorePrivilege');
    if not(IsPrivilegeEnabled('SeDebugPrivilege')) then
      EnableProcessPrivilege(True, 'SeDebugPrivilege');
    if not(IsPrivilegeEnabled('SeManageVolumePrivilege')) then
      EnableProcessPrivilege(True, 'SeManageVolumePrivilege');
  end;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if (CheckWin32Version(6, 0)) then
  begin
    if IsPrivilegeEnabled('SeBackupPrivilege') then
      EnableProcessPrivilege(False, 'SeBackupPrivilege');
    if IsPrivilegeEnabled('SeRestorePrivilege') then
      EnableProcessPrivilege(False, 'SeRestorePrivilege');
    if IsPrivilegeEnabled('SeDebugPrivilege') then
      EnableProcessPrivilege(False, 'SeDebugPrivilege');
    if IsPrivilegeEnabled('SeManageVolumePrivilege') then
      EnableProcessPrivilege(False, 'SeManageVolumePrivilege');
  end;
end;

procedure TForm1.btn1Click(Sender: TObject);
const
  KeyName = 'SOFTWARE\Microsoft\WIMMount';
var
  RootKey: HKEY;
  LastAccess: TJclRegWOW64Access;
begin
  LastAccess := RegGetWOW64AccessMode;
  RootKey := HKEY_LOCAL_MACHINE;
  try
    if not IsWindows64 then
      RegSetWOW64AccessMode(raNative);

    if not(RegKeyExists(RootKey, KeyName)) then
    begin
      lbl1.Caption := 'Ключ - ' + KeyName + ' не найден!';
    end
    else
    begin
      if not(RegDeleteKeyTree(RootKey, KeyName)) then
      begin
        lbl1.Caption := 'Ключ - ' + KeyName + ' не удален!';
      end
      else
        lbl1.Caption := 'Ключ - ' + KeyName + ' удален!';
    end;
  finally
    RegSetWOW64AccessMode(LastAccess);
  end;
end;

end.

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 27-02-2016 в 02:25.


Отправлено: 01:53, 27-02-2016 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Вопрос по библиотеке JEDI (модуль JclRegistry )

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 - Вопрос по программе для открытия рисунков по умолчанию flower Windows Server 2008/2008 R2 4 18-10-2010 17:22
Прочее - вопрос по загрузке образов cd/dvd дисков по сети andi_filon Общий по Linux 4 21-08-2009 14:48
Вопрос по платформам обработки данных и еще по всяким непонятным словам :) koresaram Хочу все знать 8 19-02-2009 18:26
Jedi Concentrate (Концентрируемся на окнах) yurfed Программное обеспечение Windows 0 22-12-2007 10:05
Star Wars: Jedi Knight 2 Mihan Игры 8 03-11-2003 11:50




 
Переход