如何使 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;
}
}
}
希望对您有所帮助。
我想配置我的 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;
}
}
}
希望对您有所帮助。