Как заставить приложение c # windows form работать только на одном ПК? - PullRequest
0 голосов
/ 14 июня 2019

Я хочу настроить приложение Windows Form C # таким образом, чтобы перед запуском приложения оно совпадало с серийным номером жесткого диска текущего компьютера. Если серийный номер жесткого диска совпадает с настроенным серийным номером, приложение запускается, в противном случае ничего не делается.

Я хочу, чтобы он запускался только на одном компьютере, чтобы предотвратить распространение приложения, поскольку это пользовательское приложение, разработанное только для клиента с некоторыми особыми требованиями.

Следующий код возвращает серийный номер жесткого диска, модель и тип интерфейса текущего компьютера.

ManagementObjectSearcher moSearcher = new ManagementObjectSearcher("select * from Win32_DiskDrive");
            foreach (ManagementObject wmi_HDD in moSearcher.Get())
            {
                HardDrive hdd = new HardDrive();

                hdd.Model = wmi_HDD["Model"].ToString();
                hdd.SerialNo = wmi_HDD["SerialNumber"].ToString();
                hdd.Type = wmi_HDD["InterfaceType"].ToString();

                HDDArrayList.Add(wmi_HDD);

                txtHDDModel.Text = hdd.Model;
                txtHDDSerialNo.Text = hdd.SerialNo;
                txtHDDType.Text = hdd.Type;
            }

Этот код в данный момент выполняется нажатием кнопки. Я хочу, чтобы он работал до основного метода, он может получить текущий серийный номер жесткого диска машины и сравнить его с моим целевым серийным номером (тот, который я хочу разрешить).

Есть ли лучший подход для этого, а также для процесса сравнения?

1 Ответ

1 голос
/ 14 июня 2019

Это должно работать для вас:

    static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        if (ValidHD() != true)
        {
            return;
        }
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    private static bool ValidHD()
    {
        string hdSN = String.Empty;
        ManagementObjectSearcher moSearcher = new ManagementObjectSearcher("select * from Win32_DiskDrive");
        foreach (ManagementObject wmi_HDD in moSearcher.Get())
        {
            hdSN = wmi_HDD["SerialNumber"].ToString();
        }

        if (hdSN == "Your_SN_Here")
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

Чтобы ограничить использование по имени пользователя, вы можете использовать это:

    static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        if (ValidUser() != true)
        {
            return;
        }
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    private static bool ValidUser()
    {
        if (System.Environment.UserName == "Your_Username_Here")
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

Надеюсь, это поможет.

...