我在考虑如何创建一个只在X时间段内有效的程序(在C#应用程序中).
我想的是你将当前日期作为程序中的常量,它会检查它是否比X日期早X天.当然,我不希望将日期或X外部存储在程序之外,因为它可以被篡改.
我也不想定期手动更改它并重新编译和部署它.那么有没有办法将变量设置为编译时的当前日期?
我可以有一个批处理文件,可以编译它并将新的exe部署到分发服务器.
谢谢
预编译指令是您的关键.您可以在应用程序中创建一个常量,并在编译时设置它.
但是,请确保对代码进行模糊处理.有人可以轻松拆卸它并篡改常数.另一个解决方案是让您的软件"手机回家"进行自我注册.这样,注册信息存储在您的服务器上,而不是他们的机器上.还有第三方软件包可以执行您所需的相同安全性,但它们很昂贵!
查看项目的Properties文件夹中的AssemblyInfo.cs文件:
// You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]
将其更改为:
[assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyFileVersion("1.0.0.0")]
然后,在程序集的其他地方,使用:
System.Version MyVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; // MyVersion.Build = days after 2000-01-01 // MyVersion.Revision*2 = seconds after 0-hour (NEVER daylight saving time) DateTime MyTime = new DateTime(2000, 1, 1).AddDays(MyVersion.Build).AddSeconds(MyVersion.Revision * 2); return string.Format("Version:{0} Compiled:{1:s}", MyVersion, MyTime);