*或者:“我应该存储我的设置的位置是否在%#%/?”Application.UserAppDataRegistry和版本号
为什么Application.UserAppDataRegistry注册表项中包含产品版本号?我认为这真的很烦人。
这不仅仅是鼓励开发者永远坚持版本号1.0.0,因为更改版本号会导致用户失去所有设置(除非额外付出努力)?
如果我剥离版本号,它当然会工作得更好(我看到它的方式),但是框架仍然使用版本号创建注册表项。
我在监督什么?
*或者:“我应该存储我的设置的位置是否在%#%/?”Application.UserAppDataRegistry和版本号
为什么Application.UserAppDataRegistry注册表项中包含产品版本号?我认为这真的很烦人。
这不仅仅是鼓励开发者永远坚持版本号1.0.0,因为更改版本号会导致用户失去所有设置(除非额外付出努力)?
如果我剥离版本号,它当然会工作得更好(我看到它的方式),但是框架仍然使用版本号创建注册表项。
我在监督什么?
我认为这是IsolatedStorage的目的。这里是一些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,它不是版本特定的。
我认为版本号在那里,以便用户可以安装2个版本的应用程序并排运行它们。除此之外,当版本号发生变化时,我没有看到丢失所有配置的理由。
就个人而言,我通常使用的配置文件坚持配置信息,避免windows的注册表
这可以让你改变什么设置存储从一个版本到另一个。如果1.0.0版本设置了“foo”,并且在2.0.0版本中,您仍然将1.0.0/foo中的内容分为2.0.0/foo和2.0.0/bar。您的安装程序/配置向导需要检查以前版本的设置分支并将其转换为新版本的设置。但请注意,您需要直接访问存储库以获取以前的版本。
它确实应该是相反的。如果我发布一个bug修复为1.0.1,我不应该经历所有这些麻烦。我不想为此创建一个新的安装程序。我应该如何处理旧的1.0.0设置?删除它们或将它们留在注册表中永恒?如果我删除它们并且用户意识到我的1.0.1不满意并且希望继续使用1.0.0,直到我可以给他一个1.0.2?我认为M $有人在这里没有清楚地思考。 – 2009-10-25 08:37:32
为什么他们不只是提供: 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);
}
这里的另一种方式,我用它来选择性剔除版本:
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);
}
如果我真的需要并排端的支持,我宁愿做额外的工作,而不是其他方式...... :-( 但是,你得到了与Application.UserAppDataPath相同的问题?写入应用程序的安装目录会导致Vista下的麻烦......所以,你把你的配置文件? – 2009-10-04 09:53:05
我p将程序文件中的配置文件绑定到以我的应用程序命名的文件夹中。开发人员经常将配置文件存储在其调试目录中,以便它们可以具有不同的配置。建议客户备份程序文件,以便在配置失败时,在调用技术支持前迅速恢复。 – 2009-10-05 00:56:31
我认为这就是darbystrom在谈论它会在Vista下引发问题时所说的。特别是,如果你的用户没有管理权限,当他/她运行你的程序时,当配置文件位于程序文件下时,它将不能保存它们的配置。最好将它放在%ALLUSERSPROFILE%下,如果你的配置是基于每台机器的话,或者%LOCALAPPDATA%是根据每个用户的话。对于您的应用在运行时修改的任何其他文件也一样。 – RobH 2009-10-19 19:27:10