设置离线设置应用程序的到期时间
Set Expiry for Offline setup Application
主要是开发新手。
我已经使用 VS 2017 为我的 c# web 应用程序构建了一个安装文件。我将在客户端计算机中部署我的安装程序,到期日期将存储在注册表中。我的设置可以离线工作。但我想 collect/gather 每周一次的客户数据。所以我想要的是,让我的客户在没有互联网的情况下使用我的设置一周。之后我的设置必须过期。然后 he/she 必须连接互联网才能将到期日期延长到下一周。请帮助我实现这一目标。提前致谢
首先为 read/write/check registry for check registration date and check with current date
创建新的表单并添加到主表单(第一个打开的表单,为此你可以在 program.cs
中更改表单名称),你也可以在当前添加方法主窗体和 运行 load events
中的方法,检查后您可以选择启动程序或显示连接和扩展对话框等。
小代码:
public partial class Reg_Form : Form
{
private string Reg_path = "Software\MySampleProgram";
private string Reg_key = "Expire";
public Reg_Form()
{
InitializeComponent();
check_expire_date();
}
private void check_expire_date()
{
bool exists_key = check_reg();
if (!exists_key)
{
//first use, so we need to write expire date
bool is_write = write_reg();
if (!is_write)
{
MessageBox.Show("Run program as administrator and try again.");
this.Close();
}
}
var dt = read_reg_val();
if (dt != null)
{
DateTime current_date = DateTime.UtcNow;
DateTime reg_date = DateTime.UtcNow;
DateTime.TryParse(dt, out reg_date);
var res = (current_date - reg_date).TotalDays;
if (res < 7)
{
Main_Form frm = new Main_Form();
this.Hide();
frm.Show();
}
else
{
MessageBox.Show("Please connect to internet for extend time !");
//do any other work.....
}
}
else
{
MessageBox.Show("Error, try again !");
this.Close();
}
}
private bool write_reg()
{
try
{
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(Reg_path);
key.SetValue(Reg_key, DateTime.UtcNow.ToShortDateString());
key.Close();
return true;
}
catch
{
return false;
}
}
private bool check_reg()
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(Reg_path);
if (key != null)
{
Object o = key.GetValue(Reg_key);
if (o != null)
{
return true;
}
}
}
catch
{
return false;
}
return false;
}
private string read_reg_val()
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(Reg_path);
if (key != null)
{
Object o = key.GetValue(Reg_key);
if (o != null)
{
string res = o as String;
DateTime dt = DateTime.Now;
bool ok_date = DateTime.TryParse(res, out dt);
if (ok_date)
{
return res;
}
else
{
//changed value by user or hacked !
DateTime today = DateTime.UtcNow;
DateTime sevenDaysEarlier = today.AddDays(-8);
return sevenDaysEarlier.ToShortDateString();
}
}
}
}
catch
{
return null;
}
return null;
}
}
注意:这是完美的记录,用户可以在 PC 上更改时间和日期,或者如果可以找到注册表可以更改和绕过到期日期,但是这对您来说是一个很好的示例。
如果问题解决了,请不要忘记将答案标记为accepted/solved。
主要是开发新手。
我已经使用 VS 2017 为我的 c# web 应用程序构建了一个安装文件。我将在客户端计算机中部署我的安装程序,到期日期将存储在注册表中。我的设置可以离线工作。但我想 collect/gather 每周一次的客户数据。所以我想要的是,让我的客户在没有互联网的情况下使用我的设置一周。之后我的设置必须过期。然后 he/she 必须连接互联网才能将到期日期延长到下一周。请帮助我实现这一目标。提前致谢
首先为 read/write/check registry for check registration date and check with current date
创建新的表单并添加到主表单(第一个打开的表单,为此你可以在 program.cs
中更改表单名称),你也可以在当前添加方法主窗体和 运行 load events
中的方法,检查后您可以选择启动程序或显示连接和扩展对话框等。
小代码:
public partial class Reg_Form : Form
{
private string Reg_path = "Software\MySampleProgram";
private string Reg_key = "Expire";
public Reg_Form()
{
InitializeComponent();
check_expire_date();
}
private void check_expire_date()
{
bool exists_key = check_reg();
if (!exists_key)
{
//first use, so we need to write expire date
bool is_write = write_reg();
if (!is_write)
{
MessageBox.Show("Run program as administrator and try again.");
this.Close();
}
}
var dt = read_reg_val();
if (dt != null)
{
DateTime current_date = DateTime.UtcNow;
DateTime reg_date = DateTime.UtcNow;
DateTime.TryParse(dt, out reg_date);
var res = (current_date - reg_date).TotalDays;
if (res < 7)
{
Main_Form frm = new Main_Form();
this.Hide();
frm.Show();
}
else
{
MessageBox.Show("Please connect to internet for extend time !");
//do any other work.....
}
}
else
{
MessageBox.Show("Error, try again !");
this.Close();
}
}
private bool write_reg()
{
try
{
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(Reg_path);
key.SetValue(Reg_key, DateTime.UtcNow.ToShortDateString());
key.Close();
return true;
}
catch
{
return false;
}
}
private bool check_reg()
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(Reg_path);
if (key != null)
{
Object o = key.GetValue(Reg_key);
if (o != null)
{
return true;
}
}
}
catch
{
return false;
}
return false;
}
private string read_reg_val()
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(Reg_path);
if (key != null)
{
Object o = key.GetValue(Reg_key);
if (o != null)
{
string res = o as String;
DateTime dt = DateTime.Now;
bool ok_date = DateTime.TryParse(res, out dt);
if (ok_date)
{
return res;
}
else
{
//changed value by user or hacked !
DateTime today = DateTime.UtcNow;
DateTime sevenDaysEarlier = today.AddDays(-8);
return sevenDaysEarlier.ToShortDateString();
}
}
}
}
catch
{
return null;
}
return null;
}
}
注意:这是完美的记录,用户可以在 PC 上更改时间和日期,或者如果可以找到注册表可以更改和绕过到期日期,但是这对您来说是一个很好的示例。
如果问题解决了,请不要忘记将答案标记为accepted/solved。