powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / работа с реестром
12 сообщений из 12, страница 1 из 1
работа с реестром
    #40031986
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть код
Код: plaintext
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.
bool readok = false;
		TRegistry* reg2 = new TRegistry(KEY_ALL_ACCESS);
		reg2->RootKey = HKEY_LOCAL_MACHINE;
		reg2->Access = KEY_ALL_ACCESS;
		try
		{
			if (!reg2->KeyExists("Software\\Extra"))
				reg2->CreateKey("Software\\Extra");
		        reg2->OpenKey("Software\\Extra", true);
			bool e = reg2->ReadBool("Connect");
			if (!reg2->ValueExists("Connect"))
				reg2->WriteBool("Connect", false);
			if (!reg2->ValueExists("kinde"))
				reg2->WriteBool("kinde", false);
			if (!reg2->ValueExists("pwd"))
				reg2->WriteString("pwd", "pwd");
			if (!reg2->ValueExists("plz"))
				reg2->WriteString("plz", "plz");
			if (!reg2->ValueExists("svr"))
				reg2->WriteString("srv", "svr");
			readok = true;
		}
		catch(Exception *e)
		{
			ShowMessage(e->Message);
		}
		reg2->CloseKey();
		delete reg2;


под полными правами создаёт всю структуру. но когда идёшь читать под пользователем - не видит значений и пытается писать их заново.
Как решить это?
...
Рейтинг: 0 / 0
работа с реестром
    #40032013
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
когда идёшь читать под пользователем
Под каким пользователем? Где код чтения?
...
Рейтинг: 0 / 0
работа с реестром
    #40032021
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
Код: plaintext
1.
HKEY_LOCAL_MACHINE


Нужно раздать всем права админа.
...
Рейтинг: 0 / 0
работа с реестром
    #40032024
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. При чём здесь дельфи?
2. new TRegistry(KEY_ALL_ACCESS); - для чтения надо открывать только на чтение.
...
Рейтинг: 0 / 0
работа с реестром
    #40032035
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73,

есть раздел форума "Windows". Там спрашивай.
...
Рейтинг: 0 / 0
работа с реестром
    #40032166
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему пишет в ветку WOW6432Node, когда задана ветка CreateKey("Software\\Extra");
...
Рейтинг: 0 / 0
работа с реестром
    #40032267
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,

ты документацию не читаешь, что ли? Работаешь с реестром, почитай документацию MS по реестру.
Вот, например:
https://docs.microsoft.com/en-us/windows/win32/sysinfo/32-bit-and-64-bit-application-data-in-the-registry
https://docs.microsoft.com/en-us/windows/win32/winprog64/registry-redirector
...
Рейтинг: 0 / 0
работа с реестром
    #40032488
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,


Ну хотя бы потому, что не выставлен доступ к x64 ветке например.
...
Рейтинг: 0 / 0
работа с реестром
    #40032530
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,
как надо?
...
Рейтинг: 0 / 0
работа с реестром
    #40032557
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,

Можно примерно так.

Код: 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.
31.
32.
33.
34.
35.
36.
const
   KEY_WOW64_64KEY = $0100;                

Procedure SetReg64Access(R:TRegistry);
begin
  if ISWINDOWS64 and Assigned(R) then R.Access:=R.Access or KEY_WOW64_64KEY;
end;

Procedure SetReg64Access(R:TRegIniFile);
begin
  if ISWINDOWS64 and Assigned(R) then R.Access:=R.Access or KEY_WOW64_64KEY;
end;

// пример использования

function GetIEVersion: string;
const
   VerKeyNew='svcVersion';
   VerKeyOld='Version';
var  Reg: TRegistry;
begin
  Result := '';
  Reg := TRegistry.Create;
  try
    SetReg64Access(Reg);  
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKeyReadOnly('Software\Microsoft\Internet Explorer') then
    try
      if Reg.ValueExists(VerKeyNew) then
         Result:=Reg.ReadString(VerKeyNew)
      else
         Result:=Reg.ReadString(VerKeyOld);
    finally Reg.CloseKey; end;
  finally Reg.Free; end;
  if Result = '' then  Result := '0';
end;
...
Рейтинг: 0 / 0
работа с реестром
    #40032564
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

только не факт, что ТС нужно писать свои параметры (свои настройки) в раздел для 64-битных программ. По ссылке, которую я ему привел, как раз же написано, что Windows автоматически перенаправляет вызовы от 32-битных программ, так что они читают и пишут в ветку WOW6432Node, предназначенную для 32-битных программ, хотя в вызове функции программист это явно не указывает (и не должен, т.к. физическое расположение ключей может измениться).

MicrosoftThe registry redirector isolates 32-bit and 64-bit applications by providing separate logical views of certain portions of the registry on WOW64. The registry redirector intercepts 32-bit and 64-bit registry calls to their respective logical registry views and maps them to the corresponding physical registry location. The redirection process is transparent to the application. Therefore, a 32-bit application can access registry data as if it were running on 32-bit Windows even if the data is stored in a different location on 64-bit Windows.
...
...
Redirected keys are mapped to physical locations under Wow6432Node. For example, HKEY_LOCAL_MACHINE\Software is redirected to HKEY_LOCAL_MACHINE\Software\Wow6432Node. However, the physical location of redirected keys should be considered reserved by the system. Applications should not access a key's physical location directly, because this location may change.
...
Рейтинг: 0 / 0
работа с реестром
    #40032700
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster
Mizer73,

Можно примерно так.

Код: 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.
31.
32.
33.
34.
35.
36.
const
   KEY_WOW64_64KEY = $0100;                

Procedure SetReg64Access(R:TRegistry);
begin
  if ISWINDOWS64 and Assigned(R) then R.Access:=R.Access or KEY_WOW64_64KEY;
end;

Procedure SetReg64Access(R:TRegIniFile);
begin
  if ISWINDOWS64 and Assigned(R) then R.Access:=R.Access or KEY_WOW64_64KEY;
end;

// пример использования

function GetIEVersion: string;
const
   VerKeyNew='svcVersion';
   VerKeyOld='Version';
var  Reg: TRegistry;
begin
  Result := '';
  Reg := TRegistry.Create;
  try
    SetReg64Access(Reg);  
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKeyReadOnly('Software\Microsoft\Internet Explorer') then
    try
      if Reg.ValueExists(VerKeyNew) then
         Result:=Reg.ReadString(VerKeyNew)
      else
         Result:=Reg.ReadString(VerKeyOld);
    finally Reg.CloseKey; end;
  finally Reg.Free; end;
  if Result = '' then  Result := '0';
end;



интересненько, спасибо. Поробую прокатать
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / работа с реестром
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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