Based on your idea:

Customer sends his bios serial number : 12AUU89EW (eg.)
You include(hardcode) that serial number in a variable in your program and compiles it and sends this to your customer.
Then, during each start of the program, it will get the bios serial and checks it with the saved value.
Is that correct ?
vb.net Code:
  1. Public Class Form1
  2.     Dim custBIOSserial As String = "12AUU89EW"    '~~~ the bios serial key that you got from your customer. Here, you have hardcoded the value and rebuild your application
  3.  
  4.     '~~~ At load, checking if both are same
  5.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  6.         If GetBIOSSerial() = custBIOSserial Then
  7.             MessageBox.Show("You are free to use this program")
  8.         Else
  9.             MessageBox.Show("Beep..Beeep.. Hey dude... Key is not matching !!!")
  10.         End If
  11.     End Sub
  12.  
  13.     Private Function GetBIOSSerial() As String
  14.         '~~~ your own code for getting the BIOS serial key for the PC that is running this program.
  15.  
  16.         'eg.
  17.         Return ("8795IPW1")
  18.     End Function
  19. End Class

I think, that's not a good approach. Hardcoding values (strings) are more vulnerable to get your app hacked !

I think, you have to work on some code to generate a license key based on the lock you want (bios serial key based lock, HDD serial key based lock, etc..) to use.

I don't have much ideas on this, but I'm sure others will provide some great ideas or suggestions.