如何使C#Windows Form应用程序仅在单个PC上运行?

时间:2019-06-14 15:39:05

标签: c# winforms runtime hard-drive

我想配置C#Windows Form应用程序,以便在运行该应用程序之前,它标识与当前计算机的硬盘驱动器序列号匹配。如果硬盘驱动器序列号与配置的序列号匹配,它将运行应用程序,否则不执行任何操作。

我想使其仅在单台计算机上运行以防止应用程序重新分发,因为这是仅针对具有某些特殊要求的客户端开发的自定义应用程序。

以下代码获取当前计算机的硬盘驱动器序列号,型号和接口类型。

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 个答案:

答案 0 :(得分:1)

这应该对您有用:

    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;
        }
    }
}

希望这会有所帮助。