Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.03.13;
Скачать: CL | DM;

Вниз

Работа с реестром в 64-разрядной ОС   Найти похожие ветки 

 
harisma ©   (2010-12-20 15:04) [0]

У нас при инсталляции программы (сделано в 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).
Нам же необходимо, чтобы всегда прописывалось в нужную ветку, независимо от разрядности операционки.
Я понимаю, что напрямую в инсталляторе этого сделать нельзя, но я могу в скрипте инсталлятора вызвать внешнюю длл, где и реализовать необходимый мне функционал. Так вот вопрос, как такую длл написать?


 
clickmaker ©   (2010-12-20 15:51) [1]

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

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


 
Rouse_ ©   (2010-12-20 16:06) [2]

Смотри флаг KEY_WOW64_64KEY


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

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


 
harisma ©   (2010-12-20 16:31) [4]

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


 
clickmaker ©   (2010-12-20 16:46) [5]

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

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


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


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



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


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


 
harisma ©   (2010-12-21 12:39) [7]

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

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-битных его не указывать?


 
Rouse_ ©   (2010-12-21 15:26) [8]

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



Страницы: 1 вся ветка

Текущий архив: 2011.03.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
1-1247086513
Joker
2009-07-09 00:55
2011.03.13
Delphi, Flash, Адресное пространство, производительность, размер


2-1292718994
CrHD
2010-12-19 03:36
2011.03.13
Варианты подгрузки кода


2-1292866353
radiokarazinec
2010-12-20 20:32
2011.03.13
TImage слои само масштабировало в зависимости от количества слоёв


15-1291033829
12
2010-11-29 15:30
2011.03.13
О chess.com. Кто-нибудь пробовал пароль восстановить?


2-1292760230
RUu
2010-12-19 15:03
2011.03.13
о сравнении дат в SQL