Главная страница
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.007 c
15-1291066179
Юрий
2010-11-30 00:29
2011.03.13
С днем рождения ! 30 ноября 2010 вторник


2-1292680185
фуфик
2010-12-18 16:49
2011.03.13
Не могу определить цвет пикселя


15-1291052230
polkin
2010-11-29 20:37
2011.03.13
SHA1


1-1248865008
pan2905
2009-07-29 14:56
2011.03.13
TXMLDocument: ошибка: "Не был произведен вызов CoInitialize"


15-1291034903
И. Павел
2010-11-29 15:48
2011.03.13
Работа с Windows-окнами из страницы, открывшейся в IE