Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何限制用户仅在特定天数内使用.net windows的exe进行试用_C#_Winforms_.net 4.5 - Fatal编程技术网

C# 如何限制用户仅在特定天数内使用.net windows的exe进行试用

C# 如何限制用户仅在特定天数内使用.net windows的exe进行试用,c#,winforms,.net-4.5,C#,Winforms,.net 4.5,我有一个.net windows应用程序的exe。我想与客户端共享exe进行试用,因此希望限制仅使用1周。我假设使用DateTime并与当前日期进行比较,但如果用户将系统日期更改回原来的日期,则不会起作用 任何解决方案?如果您的应用程序需要Internet访问,您可以让它通过调用以下返回时间字符串的web服务来测试当前日期和时间: http://www.timeapi.org/utc/now 例如,它将返回 2013-09-23T11:05:08+01:00 这是ISO 8601格式的当前时

我有一个.net windows应用程序的exe。我想与客户端共享exe进行试用,因此希望限制仅使用1周。我假设使用
DateTime
并与当前日期进行比较,但如果用户将系统日期更改回原来的日期,则不会起作用


任何解决方案?

如果您的应用程序需要Internet访问,您可以让它通过调用以下返回时间字符串的web服务来测试当前日期和时间:

http://www.timeapi.org/utc/now
例如,它将返回

2013-09-23T11:05:08+01:00
这是ISO 8601格式的当前时间。请注意,第一个字符以yyyy-mm-dd格式表示当前日期


如果你的应用程序不需要访问互联网,你可能仍然要求用户每隔5次左右启动应用程序,你就可以通过互联网查看当前时间。如今,包括智能手机在内的许多应用程序都需要访问互联网才能联系服务器或验证注册密钥。

检查用户何时启动应用程序,并将日期计数存储在隐藏文件中

样品

if (File.Exists("startapp.txt")
{
    using (StreamWriter writeFile = new StreamWriter("startapp.txt"));
    {
        StreamReader sr = new StreamReader("startapp.txt"); 
        int count = int.Parse(sr.ReadToEnd());
        sr.Close();
        count++;
        writeFile.WriteLine(count.ToString());
    }
}
else
{
    FileStream fs = File.Create("startapp.txt");
    fs.Close();
    File.SetAttributes(
    "startapp.txt", 
    FileAttributes.Archive | 
    FileAttributes.Hidden | 
    );
    StreamWriter sw = new StreamWriter(fs);
    sw.WriteLine("1");
}

然后,您可以读取该文件并检查它是否为
7

,您对用户施加的任何限制也有很多解决方法。你可以简单地将用户首次加载应用程序的日期(某处)存储起来,然后让应用程序在该日期后的一周内进行检查,也就是说,你完全不考虑系统日期。你试图根据恶意攻击者完全控制的系统状态来限制应用程序的使用。不可能,但最强大的方法是引入他们无法控制的状态——也就是说,您需要在自己的服务器上注册演示应用程序,并要求他们在应用程序运行之前对其进行确认。仍然不难理解,但要击败它就不那么容易了,如果你的目标市场很小且不具备技术性,它可能会让你安全地度过难关。是什么阻止用户重置“应用程序启动计数器”?@SimonWhitehead:你可以将其保存在隔离存储或注册表中,并对其应用加密。例如,您可以存储一个包含键和值的XML文件;密钥是从当前日期和时间(从Web服务检索)派生的,应用程序可以轻松地对其进行解密。应用程序使用该键确定上次更新值的时间。当然,时间戳必须在Windows报告的当前时间戳之前,否则(键、值)对无效。如果有效,则可以使用密钥解密该值,该值必须为1到5。