如何使 c# windows 表单应用程序 运行 仅在一台 PC 上?

How to make c# windows form application run only on a single PC?

我想配置我的 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;
            }

此代码目前 运行点击按钮即可。我希望它在 main 方法之前 运行 它可以获得当前机器硬盘驱动器序列号并将其与我的目标序列号(我想要允许的那个)进行比较。

对于这个以及比较过程,是否有更好的方法?

这应该适合你:

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

希望对您有所帮助。