Я давно пользуюсь Inno Setup для создания файлов инсталляторов для своих игр, всегда все работало примерно. Но сейчас отчего-то что старые, что новые инсталляторы не могут записать информацию в реестр. И почему-то так же не работает такой код в программе, ходя проходит все без ошибок
// cоздаем ключ lRet = RegCreateKeyEx(( HKEY)hKeyRoot, m_strRegPath.c_str( ), 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition ); if( dwDisposition != REG_CREATED_NEW_KEY && dwDisposition != REG_OPENED_EXISTING_KEY ) return false; // устанавливаем его значение TE3strcpy( szValue, MAX_PATH, strIn->c_str( ) ); dwBufLen = strIn->size( ); lRet = RegSetValueEx( hKey, strValue->c_str( ), 0, REG_SZ, ( LPBYTE)szValue, dwBufLen ); if( ( lRet != ERROR_SUCCESS) ) return false; // закрываем ключ lRet = RegCloseKey( hKey ); if( ( lRet != ERROR_SUCCESS) ) return false;
Подбросьте идей. Проверили на Win 7 и Win 8.1
Вручную создаются эти записи?
Запуск программы от админа?
Osiris
> Подбросьте идей.
Куда пишите? В current user или в local machine?
Noir
> Вручную создаются эти записи?
Через реестр (regedit) да, создается.
unnamed
> Куда пишите? В current user или в local machine?
В local machine. При чем там получается две вложенные еще папки, путь такой - Software\\TotemGames.ru\\IroncladsACW2
Noir
> Запуск программы от админа?
Инсталлятор всегда испод админа, вот теперь еще и программа считать не может. Надо попробовать в локального пользователя повесить.
Сменил на current user, по крайней мере стал читать. И писать из программы, но инсталлятор по-прежнему не может ничего записать в реестр.
Разобрался, для начала надо создать в скрипте эти переменные так
Root: "HKCU"; Subkey: "{#RegPath}"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Flags: createvalueifdoesntexist uninsdeletekey Root: "HKCU"; Subkey: "{#RegPath}"; ValueType: string; ValueName: "UserKey"; ValueData: ""; Flags: uninsdeletekey createvalueifdoesntexist
Обращаем внимание на флаг createvalueifdoesntexist
А записываем данные уже обычно, когда переменная создана
RegWriteStringValue( HKCU, 'Software\TotemGames.ru\IroncladsACW2', 'UserKey', KeyNameEdit.Text );
Тема в архиве.