如何使用c#创建一个简单的一次性激活过程



我想为我的windows窗体应用程序创建一个简单的一次性激活过程。所以,我基本上有两种形式,形式1是激活窗口,形式2是实际程序。我在下面的表格1中创建了一个非常基本的激活程序

string mac = textBox1.Text;
string str1 = mac.Substring(4,1);
string str2 = mac.Substring(5,1);
string str3 = mac.Substring(7,1);
string str4 = mac.Substring(2, 1);
string pattern = str1 + str2 + str2 + str3 + str4;
if (textBox2.Text == pattern)
{
MessageBox.Show("Program activated!!!");
Form2 n = new Form2();
n.Show();
this.Hide();
}
else { MessageBox.Show("Wrong key"); }

现在,问题是每次我加载程序时,它总是加载form1,即使之前有人成功输入了一次密钥(即pattern)。我如何存储这些信息,以便如果有人输入了正确的密钥,那么每次加载程序时,它都会自动显示form2(即我的实际程序)并跳过form1。顺便说一句,我知道还有其他更先进、更安全的方法可以做到这一点,但我目前只是对这种非常基本的方法感兴趣。有人能帮忙吗?

这里有一个非常基本的方法-在激活时将文件写入已知位置,然后在每次加载表单时检查该文件是否存在。如果存在,立即显示Form2。如果没有,给他们激活的机会。

不同的方法是将激活状态保存在注册表、数据库或其他地方,但整个过程大约是相同的

样本代码:

首先,一种获取要创建的文件路径的方法:

private string GetActivatedFilePath()
{
var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var thisExeName = Path.GetFileNameWithoutExtension(
System.Reflection.Assembly.GetEntryAssembly().Location);
return Path.Combine(appDataPath, thisExeName, "Activated.txt");
}

然后使用两种方法创建文件(Activate())、检查文件是否存在(IsActivated)和删除文件(Deactivate()):

private void Activate()
{
if (!IsActivated())
{
var filePath = GetActivatedFilePath();
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
File.Create(filePath);
}
}
private bool IsActivated()
{            
return File.Exists(this.GetActivatedFilePath());
}
private void Deactivate()
{
if (IsActivated())
{
File.Delete(GetActivatedFilePath());
}
}

然后我们也可以创建一个方法来显示第二种形式,因为我们将在多个地方调用它。我修改了它,首先隐藏当前表单,然后将第二个表单显示为对话框(这意味着他们无法切换回主表单,代码将在第一个表单中暂停,直到第二个关闭),然后在第二个闭合时关闭第一个表单:

private void ShowForm2()
{
Form2 n = new Form2();
this.Hide();
n.ShowDialog();
this.Close();
}

现在我们可以检查它们是否在Form_Load事件中被激活,如果它们被激活,则立即显示第二种形式:

private void Form1_Load(object sender, EventArgs e)
{
// If they user is already activated, show the second form immediately
if (IsActivated())
{
ShowForm2();
}
}

然后,您当前的代码也可以使用这些功能来激活用户。我假设代码位于Activate按钮后面:

private void btnActivate_Click(object sender, EventArgs e)
{
bool activated = false;
if (textBox1.Text.Length > 7)
{
string mac = textBox1.Text;
string str1 = mac.Substring(4, 1);
string str2 = mac.Substring(5, 1);
string str3 = mac.Substring(7, 1);
string str4 = mac.Substring(2, 1);
string pattern = str1 + str2 + str2 + str3 + str4;
activated = textBox2.Text == pattern;
}
if (activated)
{
MessageBox.Show("Program activated!!!");
Activate();
ShowForm2();
}
else
{
MessageBox.Show("Wrong key");
}
}

最新更新