【问题标题】:Alternate Application.Run Winform In Program.cs File备用 Application.Run Winform 在 Program.cs 文件中
【发布时间】:2011-02-25 14:08:08
【问题描述】:

我有一个包含两个 Winform 的项目,我想以备用形式运行应用程序。在 program.cs 文件中有:

Application.Run(new Form1());

这意味着 Form1 将作为应用程序的主窗体或启动窗体执行。 是否可以通过某个时间限制或天数限制以编程方式更改它? 我的意思是两天后它将执行 Form2 作为启动表单。 如下:

Application.Run(new Form2());

有可能吗?

【问题讨论】:

  • 您可以通过跟踪应用程序何时打开以及Form(可能使用文本文件)在哪个位置来实现此目的。在加载表单之前,从文本文件中读取并切换表单以相应地加载。

标签: c# winforms


【解决方案1】:

当然,没问题:

var startDate = ReadStartDateFromFile();
if(DateTime.Now.Subtract(startDate).TotalDays < 2 || startDate == new DateTime())
    Application.Run(new Form1());
else
    Application.Run(new Form2());

ReadStartDateFromFile 方法读取程序第一次启动的日期。如果之前从未启动过,则返回new DateTime()
如果你想以此作为实现共享软件机制的一种方式,可以考虑使用混淆器,否则很容易被破解。此外,您应该加密文件,将开始日期写入其中。此外,考虑一个设置,它使用虚拟日期创建该文件。如果有人简单地删除了文件,您应该认为是安全漏洞并直接显示Form2

感谢 Mark 在 cmets 的精彩讨论!

【讨论】:

  • @Daniel Hilgarth,我想限制两天后的天数
  • @Daniel, @Mahesh:如果您将这样的内容存储在文本文件中,我建议您以某种方式对其进行加密;否则,用户可以只编辑文本文件并将日期设置为将来的某个时间点(从而给他们更多时间)。
  • @Daniel:是的,但如果你使用 128 位或更高版本,它非常接近双向 :-)
  • @Mark Avenius:只要他使用的混淆器做得很好;-) 因为解密和加密该文件的所有信息都在程序中。顺便说一句:在当前的“实现”中,只需删除文件就足够了...... ;-) 他需要一个设置来创建文件并在其中放入一个虚拟值,并考虑文件丢失时的情况作为安全漏洞并停止工作...
  • @mahesh:我从未发布过任何共享软件,所以我所有的输入都是理论上的,只是基于常识和我的经验。无论如何,我认为这不是问题的范围。如果我的回答对您提出的问题有所帮助,请接受。如果您想询问有关共享软件和防止破解的具体问题,我的建议是您创建一个新问题。
【解决方案2】:
if(someRuleToDetermineIfForm1NeedsToRun)
{
  Application.Run(new Form1());
}
else if(someRuleToDetermineIfForm2NeedsToRun)
{
  Application.Run(new Form2());
}
else // default
{
  Application.Run(new Form1());
}

【讨论】:

  • @mahesh,将此方法与存储上次使用的表单的文本文件一起使用。
【解决方案3】:

当然;你可以这样做:

if (condition1)
    Application.Run(new Form1());
else
    Application.Run(new Form2());

您可以根据传入的参数等设置条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多