更改Babelfor.Net许可文件位置

时间:2014-08-08 09:14:52

标签: c# .net

目前,我正在使用Babelfor.Net在我们的软件中实施许可功能。一切都很好,除了一件事 - 许可证文件必须放在与执行程序集相同的文件夹中,然后由继承了Babel.Licensing.XmlLicenseProvider的{​​{1}}加载 System.ComponentModel.LicenseProvider

我们提供默认的30天试用许可证以及设置,因此用户可以环顾四周并最终购买许可证。 然后必须使用新许可证替换默认试用许可证 - 但普通用户无权访问Program Files目录,因此用户需要以管理员身份启动应用程序或手动复制文件 - hacky。

有没有办法将许可证文件放在%appdata%%programdata%中?或者安装程序可能会创建一个指向%appdata%文件夹中的许可证文件的联结(符号链接)?

3 个答案:

答案 0 :(得分:1)

在Vista / Win7 / Win8上以非管理员身份运行时,您无法写入 “程序文件”文件夹(或其任何子文件夹)。

查看Nir´s post

存储用户首选项的正确位置是(显然用正确的名称替换MyCompanyName和MyApplicationName)

在磁盘上:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\MyCompanyName\\MyApplicationName"

或在密钥下的注册表中

 HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName

这些位置是针对每个用户的,他们与非管理员用户,使用同一台计算机的多个用户,快速用户切换,终端服务以及人们可以与您的软件进行交互的所有其他方式一起工作。

如果您需要所有用户的公共位置,那么:

  1. 仅当用户以管理员身份运行时才会起作用
  2. 它无法在Vista上可靠地运行
  3. 您必须自己处理所有事情(例如,通过快速用户切换,同时在同一台计算机上运行应用程序的两个用户)。
  4. 并且位置是:

    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%的标准路径

唯一的问题是有时人们会清除这些文件夹,因为它们会被各种各样的垃圾填满。