Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.03.13;
Скачать: [xml.tar.bz2];

Вниз

Работа с реестром в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.002 c
15-1290754193
И. Павел
2010-11-26 09:49
2011.03.13
Системные требования


15-1291182331
RGV
2010-12-01 08:45
2011.03.13
SpeechSDK51


1-1248526413
ford
2009-07-25 16:53
2011.03.13
проверка орфографии


15-1291223827
Haradzienski
2010-12-01 20:17
2011.03.13
Книги по Дэлфи


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский