我想配置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;
}
此代码当前在单击按钮时运行。我希望它在主要方法之前运行,它可以获取当前计算机的硬盘驱动器序列号,并将其与我的目标序列号(我要允许的序列号)进行比较。
是否有更好的方法以及比较过程?
答案 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;
}
}
}
希望这会有所帮助。