2009-10-04 4 views
1

* Или: «Где % #% ¤/am Я должен хранить свои настройки?»Application.UserAppDataRegistry и номер версии

Почему номер версии продукта включен в раздел реестра Application.UserAppDataRegistry? Я думаю, это действительно раздражает.

Разве это не поощряет разработчиков придерживаться версии 1.0.0 навсегда, так как изменение номера версии приведет к тому, что пользователь потеряет все настройки (если не будут предприняты дополнительные усилия)?

Если я отменил номер версии, он, конечно, будет работать «лучше» (как я его вижу), но структура по-прежнему создает ключ реестра с номером версии.

Что я наблюдаю за этим?

ответ

1

Я думаю, что это то, для чего предназначен IsolationStorage. Вот некоторые примеры VB код:

Public Shared Sub SaveGridLayout(ByVal grd As Infragistics.Win.UltraWinGrid.UltraGrid, ByVal sPrefix As String) 
    Dim isf As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication() 
    Dim userDataFile As IsolatedStorageFileStream = New IsolatedStorageFileStream("ClearTrac" + sPrefix + ".dat", FileMode.Create, isf) 
    grd.DisplayLayout.Save(userDataFile) 
    userDataFile.Flush() 
    userDataFile.Close() 
End Sub 

Если использование использовать GetUserStoreForApplication, это не к конкретной версии.

0

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

Лично я обычно использую конфигурационные файлы для сохранения информации о конфигурации и избежать реестра Windows

+0

Если мне действительно нужно бок о бок поддержки, Я предпочел бы сделать дополнительную работу THEN, а не наоборот ... :-( Но у вас такая же проблема с Application.UserAppDataPath? И запись в каталог установки приложения вызовет проблемы в Vista ... так что вы размещаете свои файлы конфигурации? –

+0

I p закрутите конфигурационные файлы в файлы программы в папке, названной в честь моего приложения. Разработчики часто хранят файлы конфигурации в своих каталогах отладки, так что они могут иметь другую конфигурацию. Клиенту рекомендуется резервное копирование файлов программы, чтобы, если они пострадали от сбоя конфигурации, они могут быстро восстановиться до вызова технической поддержки. –

+1

Я думаю, что это торт darbystrom говорил о том, когда он сказал, что это вызовет проблемы под Vista. В частности, если ваш пользователь не имеет прав администратора, когда он запускает вашу программу, он не сможет сохранить свою конфигурацию, когда файл конфигурации находится в разделе «Файлы программы».Лучше поставить его в% ALLUSERSPROFILE%, если ваши настройки настроены на каждую машину или% LOCALAPPDATA%, если они предназначены для каждого пользователя. То же самое для любых других файлов, которые ваше приложение меняет во время выполнения. – RobH

0

Это позволяет изменить то, что настройки сохраняются от одной версии к другой. Если версия 1.0.0 имеет настройку «foo», а в версии 2.0.0 вы разбиваете то, что находится в 1.0.0/foo, до 2.0.0/foo и 2.0.0/bar, которые вы по-прежнему покрываете. Мастер установки/конфигурации должен будет проверить ветви настроек предыдущих версий и преобразовать их в настройки новой версии. Обратите внимание, однако, что вам нужно напрямую обращаться к репозиторию, чтобы получить предыдущие версии.

+0

Это действительно должно быть наоборот. Если я выпущу исправление ошибки как 1.0.1, мне не придется проходить через все эти проблемы. Я не хочу создавать для этого новый установщик. И что мне делать со старыми настройками 1.0.0? Удалите их или оставите их в реестре на вечность? Что делать, если я удалю их, и пользователь понял, что мой 1.0.1 был неудовлетворительным и descid продолжать использовать 1.0.0, пока я не могу дать ему 1.0.2? Я думаю, что кто-то из M $ не думал здесь явно. –

3

Почему они просто не обеспечивают: UserAppDataRegistryVersionSpecific И UserAppDataRegistryGlobal Тогда разработчики могли бы решили, какой они предпочитают для конкретного проекта/конкретные параметры.

Кстати, есть простой обходной путь:

string VersionIndependentRegKey { 
    get { 
    string versionDependent = System.Windows.Forms.Application.UserAppDataRegistry.Name; 
    string versionIndependent = 
      versionDependent.Substring(0, versionDependent.LastIndexOf("\\")); 
    return versionIndependent; 
    } 
} 
object GetRegistryValue(string name, object defaultValue) { 
    return Registry.GetValue(VersionIndependentRegKey, name, defaultValue); 
} 
object GetRegistryValue(string name) { 
    return GetRegistryValue(name, null); 
} 
void SetRegistryValue(string name, object value, RegistryValueKind kind) { 
    Registry.SetValue(VersionIndependentRegKey, name, value, kind); 
} 
1

Вот еще один способ я использую, чтобы при необходимости вырезать версию:

if (Include_Version == true) 
{ 
    rootRegKey = Application.UserAppDataRegistry; 
} 
else 
{ 
    regKey = Application.UserAppDataRegistry.Name; 
    rootRegKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(regKey.Substring(regKey.IndexOf("\\") + 1, regKey.LastIndexOf("\\") - regKey.IndexOf("\\") - 1), true); 
} 
Смежные вопросы