C#在编译时将日期放入程序program)。我在想的是,您可以将当前日期作为程序中的常量,并检查它是否早于X日期。当然,我不想在程序外部存储日期或X,因为它可能被篡改。我也不想手动更改它并定期重新编译和部署它。那么有没有办法在编译时将变量设置为当前日期呢?我可以有一个批处理文件来编译它并将新的exe部署到分发服务器。谢谢预编译指令是您的关键。您可以在应用程序中创建一个常量并在编译时设置它。但是,请确保混淆代码。有人可以轻易地拆解它并篡改常量。另一种解决方案是让您的软件“打电话回家”进行自我注册。这样,注册信息就存储在您的服务器上,而不是他们的机器上。还有第三方软件包可以提供您所需的相同安全性,但它们很昂贵!查看项目的Properties文件夹中的AssemblyInfo.cs文件://您可以指定所有值,也可以使用“*”来默认生成和修订号//如下所示://[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.VersionMyVersion=System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;//MyVersion.Build=daysafter2000-01-01//MyVersion.Revision*2=secondsafter0-hour(NEVERdaylightsavingtime)DateTimeMyTime=newDateTime(2000,1,1).AddDays(MyVersion.Build).AddSeconds(MyVersion.Revision*2);returnstring.Format("版本:{0}编译:{1:s}",MyVersion,MyTime);我会选择“打电话回家”——各种。并让这次通话有价值。;)我的意思是,您的程序中的一些重要功能(也许进行一些计算?)将在服务器上进行。因此,如果用户反编译程序并删除“回家”,就会使程序无用。我知道并非所有程序都有使这成为可能的程序,但总的来说,它们比您想象的要多。从您的自动构建过程(您确实使用了自动构建过程,对吗?),让一个简单的应用程序生成一行C#classpublicstructTimeLimit{publicDateTimeDate=newDateTime(2009,1,1);}自动更改日期,然后编译。然后在您的应用中引用TimeLimit.Date。我知道这是一个3年前的问题,但只是加上我的2美分。我们使用JamesCurran建议的结构中硬编码的“DateLimit”。但我们也使用相同的“日期”作为“加密”和“解密”(更多代码和解码)所有字符串、标签和消息的简单密钥。如果有人(让我们称其为骗子)想要更改到期日期,他们将不得不遍历整个程序集并重新输入所有这些字符串以获得新的到期日期。它并不完美,但我们的成本现在几乎为零,骗子的成本很高。我建议你把日期放在一个单独的、强命名的程序集中——这样至少恶意用户会发现很难反汇编、编辑和让你的程序使用它。有没有办法让两个程序集根据强名称相互验证?我们这样做是对我们的一个组件进行权限控制的第一步。如果调用程序集与许可证控制的程序集具有相同的指纹,我们假设它在我们自己的软件中使用并且许可证被绕过。如果调用程序集具有不同的指纹或根本未打印,则执行正常的许可证检查。当我想到它时,我们的用户可以在没有强命名和绕过权限的情况下进行反汇编、编译。但话又说回来,我们所有的程序集都以x86而非CIL的形式分发——这会改变什么吗?我们的经验是,如果您要与公司客户打交道,没有人会不厌其烦地篡改您的东西,尤其是因为有被抓到的风险。有点牵强,我们当前的许可解决方案已经过时(该软件包包含VC5的示例!),但到目前为止是一个足够高的障碍。另一方面,对于消费者来说,我可以想象这是一个更大的威胁。我最初的建议似乎产生了更多可以回答的问题——毕竟可能没那么有用。.Net的问题在于它很容易反编译并且更改您要使用的日期是不变的。您可能需要考虑其他事项。您可以将其写入注册表,人们将编辑该值。它们不是完美的解决方案,但拥有一个可以通过外部(Web)服务器进行身份验证的帐户是个好主意。以上是C#学习教程:C#在编译时将日期放入程序中。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,并不代表侵权,如有侵权,请点击右边联系管理员删除。如需转载请注明出处:
