Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с реестром в 64-разрядной ОС [D5, XP]


harisma ©   (2010-12-20 15:04:00) 

У нас при инсталляции программы (сделано в Wise Installer 9.02) в реестр прописываются некоторые параметры. Так вот, когда инсталируем на 32-битную операционку, то все нормально, а когда на 64-битную, то прописывается не в ту ветку (вместо ветки HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AppCompatFlag\Lay er пишет в ветку HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\AppCo mpatFlag\Layer).
Нам же необходимо, чтобы всегда прописывалось в нужную ветку, независимо от разрядности операционки.
Я понимаю, что напрямую в инсталляторе этого сделать нельзя, но я могу в скрипте инсталлятора вызвать внешнюю длл, где и реализовать необходимый мне функционал. Так вот вопрос, как такую длл написать?


Rouse_   (2010-12-21 15:26:00) [1]

32 битные его игнорируют


harisma   (2010-12-21 12:39:00) [2]

Ладно, трепаться все горазды, за исключением некоторых действительно давших дельный совет :)
Решить проблему удалось. Вот код:

function  WriteDEPParamInReg(AAppName: PChar): SHORT;
var
 dummy: Integer;
 org: TRegistryEx;
 key: HKEY;
begin
 org := TRegistryEx.Create;
 try
   org.RootKey := HKEY_LOCAL_MACHINE;
   if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, DEPRegKey, 0, nil, Reg_Option_Non_Volatile,
     KEY_ALL_ACCESS or KEY_WOW64_64KEY, nil, Key, @Dummy) = Error_Success) then
   begin
     org.SetCurrentKey(key);
     org.WriteString(StrPas(AAppName), 'DisableNXShowUI');
     org.CloseKey;
   end;
 finally
   FreeAndNil(Org);
 end;
 Result := 0;
end;

Только остается вопрос: не будет ли корректнее указывать ключ KEY_WOW64_64KEY только для 64-битных систем, а для 32-битных его не указывать?


Игорь Шевченко   (2010-12-21 10:23:00) [3]


> Наша программа вобще говоря 32 битная



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


А ты уверен, что тогда 32-х битная программа будет работать ?


clickmaker   (2010-12-20 16:46:00) [4]

> Наша программа вобще говоря 32 битная

ну тогда все правильно. У них своя песочница, и system32 тоже свой - SysWOW64


harisma   (2010-12-20 16:31:00) [5]

Наша программа вобще говоря 32 битная, но на 64 разрядной оси тоже работает.


Игорь Шевченко   (2010-12-20 16:14:00) [6]

а ваша инсталлируемая программа 64-битная ?


Rouse_   (2010-12-20 16:06:00) [7]

Смотри флаг KEY_WOW64_64KEY


clickmaker   (2010-12-20 15:51:00) [8]

> напрямую в инсталляторе этого сделать нельзя

Wise Installer не поддерживает 64бит?


Наверх

Титульная страница Поиск, карта сайта Написать письмо