Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / работа с реестром / 12 сообщений из 12, страница 1 из 1
28.12.2020, 20:26
    #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
28.12.2020, 21:31
    #40032013
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с реестром
Mizer73
когда идёшь читать под пользователем
Под каким пользователем? Где код чтения?
...
Рейтинг: 0 / 0
28.12.2020, 21:52
    #40032021
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с реестром
Mizer73
Код: plaintext
1.
HKEY_LOCAL_MACHINE


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

есть раздел форума "Windows". Там спрашивай.
...
Рейтинг: 0 / 0
29.12.2020, 11:59
    #40032166
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с реестром
почему пишет в ветку WOW6432Node, когда задана ветка CreateKey("Software\\Extra");
...
Рейтинг: 0 / 0
29.12.2020, 14:49
    #40032267
s62
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
30.12.2020, 02:39
    #40032488
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с реестром
Mizer73,


Ну хотя бы потому, что не выставлен доступ к x64 ветке например.
...
Рейтинг: 0 / 0
30.12.2020, 11:00
    #40032530
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с реестром
DarkMaster,
как надо?
...
Рейтинг: 0 / 0
30.12.2020, 11:54
    #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
30.12.2020, 12:06
    #40032564
s62
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
30.12.2020, 19:29
    #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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / работа с реестром / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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