Установить срок действия приложения для автономной настройки - PullRequest
0 голосов
/ 27 сентября 2018

Прежде всего, я новичок в разработке.

Я создал файл установки для своего веб-приложения c # с использованием VS 2017. Я собираюсь развернуть программу установки на клиентском компьютере с датой истечения срока действия, которая будет храниться в реестре.Моя установка может работать в автономном режиме.Но я хочу собирать / собирать данные о клиентах еженедельно.Итак, все, что я хочу, это позволить моему клиенту использовать мою установку без интернета в течение одной недели.после этого мои настройки должны истечь.Затем он / она должен подключиться к Интернету, чтобы продлить срок действия на следующую неделю.Пожалуйста, помогите мне добиться этого.Заранее спасибо

1 Ответ

0 голосов
/ 27 сентября 2018

Прежде всего создайте новую форму для 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;
        }
    }

Примечание: это примечаниеидеально, пользователь может изменить время и дату на ПК. Или, если найдет реестр, может изменить и обойти дату истечения срока, однако это хороший пример для вас.

, если проблема решена, поэтому, пожалуйста, не забудьте пометить ответ какобщепринятый / решена.

...