目前,我正在使用Babelfor.Net在我们的软件中实施许可功能。一切都很好,除了一件事 - 许可证文件必须放在与执行程序集相同的文件夹中,然后由继承了Babel.Licensing.XmlLicenseProvider
的{{1}}加载
System.ComponentModel.LicenseProvider
。
我们提供默认的30天试用许可证以及设置,因此用户可以环顾四周并最终购买许可证。
然后必须使用新许可证替换默认试用许可证 - 但普通用户无权访问Program Files
目录,因此用户需要以管理员身份启动应用程序或手动复制文件 - hacky。
有没有办法将许可证文件放在%appdata%
或%programdata%
中?或者安装程序可能会创建一个指向%appdata%
文件夹中的许可证文件的联结(符号链接)?
答案 0 :(得分:1)
在Vista / Win7 / Win8上以非管理员身份运行时,您无法写入 “程序文件”文件夹(或其任何子文件夹)。
查看Nir´s post:
存储用户首选项的正确位置是(显然用正确的名称替换MyCompanyName和MyApplicationName)
在磁盘上:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\MyCompanyName\\MyApplicationName"
或在密钥下的注册表中
HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName
这些位置是针对每个用户的,他们与非管理员用户,使用同一台计算机的多个用户,快速用户切换,终端服务以及人们可以与您的软件进行交互的所有其他方式一起工作。
如果您需要所有用户的公共位置,那么:
并且位置是:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationCommonData) + "\\MyCompanyName\\MyApplicationName"
或在密钥下的注册表中
HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName
答案 1 :(得分:1)
您可以通过代码告诉Babel在哪里找到许可证文件。
我使用此代码在网站的子目录中查找许可证:
Babel.Licensing.XmlLicense.SearchDirectories = new string[] { Server.MapPath("~/Licenses") };
类似的东西:
Babel.Licensing.XmlLicense.SearchDirectories = new string[] { System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyCompanyName", "MyApplicationName") };
(未经测试),应该工作。
答案 2 :(得分:0)
你的%appdata%或%programdata%文件夹的想法可行。可以从操作系统中找到当前用户名,然后(这只适用于Windows)您知道%appdata%或%programdata%的标准路径
唯一的问题是有时人们会清除这些文件夹,因为它们会被各种各样的垃圾填满。