Войти
Игровой ДизайнФорумОбщее

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

#0
13:53, 27 июля 2015

Я давно пользуюсь 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


#1
14:18, 27 июля 2015

Вручную создаются эти записи?
Запуск программы от админа?

#2
15:42, 27 июля 2015

Osiris
> Подбросьте идей.

Куда пишите? В current user или в local machine?

#3
15:47, 27 июля 2015

Noir
> Вручную создаются эти записи?
Через реестр (regedit) да, создается.

unnamed
> Куда пишите? В current user или в local machine?

В local machine. При чем там получается две вложенные еще папки, путь такой - Software\\TotemGames.ru\\IroncladsACW2

#4
15:53, 27 июля 2015

Noir
> Запуск программы от админа?
Инсталлятор всегда испод админа, вот теперь еще и программа считать не может. Надо попробовать в локального пользователя повесить.

#5
16:06, 27 июля 2015

Сменил на current user, по крайней мере стал читать. И писать из программы, но инсталлятор по-прежнему не может ничего записать в реестр.

#6
16:39, 27 июля 2015

Разобрался, для начала надо создать в скрипте эти переменные так

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 );

Игровой ДизайнФорумОбщее

Тема в архиве.