Где сохранить настройки программы вместо HKEY_LOCAL_MACHINE?

просто добавьте его в свой composer.json

12
задан Joel Coehoorn 12 November 2008 в 20:49
поделиться

9 ответов

Необходимо поместить:

  • персональные настройки (как положение окна и незначительные предпочтения) под HKEY_CURRENT_USER в реестре или в CSIDL_APPDATA или CSIDL_LOCAL_APPDATA папка;
  • настройки важного приложения (как фиксированный путь, который не должен быть изменен Вашими пользователями) под HKEY_LOCAL_MACHINE в реестре или в папке приложения. Установите их во время установки, когда права администратора будут доступны;
  • совместно используемые данные (данные, которые все Ваши пользователи должны считать и записать в, как простая база данных) в CSIDL_COMMON_APPDATA папка.

Используйте SHGetFolderPath для нахождения местоположения CSIDL_* папки.

В зависимости от Ваших потребностей Вы хотели бы реализовывать все три опции, данные сразу. Не было бы ничего неправильно с ним.

33
ответ дан 2 December 2019 в 03:06
поделиться

Могло бы быть некоторое хорошее место в реестре для помещения их, я не знаю о, но почему не только добавляют ini-файл в C:\Documents and Settings\All Users\Application Data\yourApp

13
ответ дан 2 December 2019 в 03:06
поделиться

Какой сказанный @uli, за одним исключением.

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

Информация о соединении для базы данных походит на вид вещи, которая не должна быть изменена без вмешательства администратора. Поэтому в этом случае папка Вашего приложения могла бы быть хорошо.

2
ответ дан 2 December 2019 в 03:06
поделиться

Вы упомянули HKEY_LOCAL_USER, но я не вижу это на верхнем уровне в Реестре. Я предполагаю, что необходимо иметь в виду HKEY_CURRENT_USER.

Я поместил свои пользовательские настройки под HKEY_CURRENT_USER/Software/my-program. Я нахожу, что это работает в соответствии с Vista без проблемы.

Но так как Вы говорите, что у Вас есть настройки, которые относятся ко всем пользователям, которых Вы не хотите под HKEY_CURRENT_USER, затем Вы могли бы попробовать также:

HKEY_USERS/.DEFAULT/Software/your-program

или

HKEY_CURRENT_CONFIG/Software/your-program

Я боюсь, что не использую или тех местоположений, таким образом, я не могу сказать Вам, если они работают над Vista или нет, но я действительно вижу, что некоторые поставщики программного обеспечения добавили ключи реестра там.

1
ответ дан 2 December 2019 в 03:06
поделиться

Сохраните материал в %APPDATA % или %LOCALAPPDATA %

1
ответ дан 2 December 2019 в 03:06
поделиться

Можно ли сделать .msi файл, который может использоваться для выставления настроек реестра через групповую политику?

0
ответ дан 2 December 2019 в 03:06
поделиться

Всегда существуют старомодные файлы INI. Они являются более портативными тот реестр настройки. Другая опция была бы XML-файлом.

Не храните их в каталоге Program Files, хотя - Vista не понравится это.

0
ответ дан 2 December 2019 в 03:06
поделиться

Спросите себя, действительно ли ваши настройки подходят для всех пользователей. Действительно ли для всех пользователей?

Тщательно обдумайте этот вопрос:

Как программа работала под Windows XP в качестве стандартного пользователя?

  • Программа просто вылетела?
  • Была ли настройка отключена?
  • Вы говорили своим клиентам, что они должны работать от имени администратора, и если они откажутся, вы не станете его поддерживать?

Потому что, если ваше программное обеспечение абсолютно требует , чтобы вы были администратором, затем просто добавьте манифест к исполняемому файлу, заявив, что он должен запускаться от имени администратора:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
   <assemblyIdentity 
      version="1.0.0.0"
      processorArchitecture="X86"
      name="IsUserAdmin"
      type="win32"/> 

   <description>Description of your application</description> 

   <!-- Identify the application security requirements. -->
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
         <requestedPrivileges>
                <requestedExecutionLevel
               level="requireAdministrator"
               uiAccess="false"/>
         </requestedPrivileges>
      </security>
   </trustInfo>
</assembly>

И, конечно, вы администратор.


Но я не думаю, что вам действительно нужен администратор. Единственный раз, когда вам понадобится настройка локального компьютера, это если вы вы собираетесь иметь пользователей из нескольких учетных записей или сеансов, использующих программное обеспечение. Если это действительно что-то, что применимо к каждому пользователю, не должна ли программа установки настроить это?

У нас возник тот же вопрос. Системе наблюдения необходимо настроить, какое устройство захвата будет использоваться программным обеспечением. Можно сказать, что все операторы наблюдения будут использовать одно и то же устройство захвата, поэтому, как только кто-то его выберет, этот параметр будет глобальным для всех операторов. Но на практике это не так. Скорее всего, есть только одно устройство захвата, и это то, что мы используем. Если их несколько, пользователь может просто выбрать другое устройство.


Но есть несколько способов справиться с этим

i) Сохраните настройки в реестре, и пусть программа установки установит ACL для ключа, предоставив всем пользователям Полный доступ .

ii) Сохраните настройки в файле

% APPDATA% \ Surveillance \ settings.ini

, Пусть программа установки создаст файл настроек и ACL, чтобы позволить всем пользователям иметь Полный доступ

iii) Сохраните настройки в вышеупомянутом разделе реестра или ini-файле и используйте

, чтобы добавить UAC Shield к кнопке Save / OK / Применить . Когда пользователь нажимает кнопку, вы перезапускаете приложение с повышенными правами (используя RunAsAdmin ), передавая параметры командной строки, указывающие, что вы хотите изменить.

iv) Выполните то же самое, что и 3, но сделайте это до того, как они могут попасть на экран, который используется для редактирования значений.

v) Сделайте то же, что и 4, но пусть значения изначально доступны только для чтения, и если они хотят изменить их, они должны их повысить.

vi) Иметь параметры отключены, если пользователь работает как обычный пользователь, и если он хочет их изменить: щелкните исполняемый файл правой кнопкой мыши и выберите

Запуск от имени администратора


Если это параметр, который пользователь мог изменить в любое время (когда вы работали в Windows XP и пользователь был администратором), то это кажется возможность этого пользователя редактировать значение по своему усмотрению является приемлемым.

В этом случае вы можете просто позволить пользователю ввести имя сервера, как им было разрешено делать раньше. Если у пользователя есть разрешение на запись в HKLM, сохраните параметр там. В противном случае сохраните его в HKCU. При чтении того, какой сервер использовать, начните с HKCU и перейдите к HKLM, если значение HKCU отсутствует.

Если у пользователя есть разрешение на запись в HKLM, сохраните параметр там. В противном случае сохраните его в HKCU. При чтении того, какой сервер использовать, начните с HKCU и перейдите к HKLM, если значение HKCU отсутствует.

Если у пользователя есть разрешение на запись в HKLM, сохраните параметр там. В противном случае сохраните его в HKCU. При чтении того, какой сервер использовать, начните с HKCU и перейдите к HKLM, если значение HKCU отсутствует.

1
ответ дан 2 December 2019 в 03:06
поделиться

Я прочитал все ответы здесь и прочее в другом месте, и, похоже, ответ ... Не используйте реестр! Неужели это действительно то, что Microsoft хочет, чтобы мы делали с данными конфигурации программы, которые применимы ко всем пользователям!?

0
ответ дан 2 December 2019 в 03:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: