加密程序-注册方法实现
1、在我们安装到一个程序到一个机械上时往往需要对其进行加密,也就是注册,没有注册的电脑我们是不能允许访问的
2、如果你的程序中没有用到nhibernate,那在Global.asax文件里面写入注册的方法
1 protected void Application_BeginRequest(Object sender, EventArgs e) 2 { 3 //验证用户是否注册 4 OilDigital.Opsys.Web.CheckHelper.Check(); 5 }
3、类CheckHelper的代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class CheckHelper 2 { 3 /// <summary> 4 /// Checks this instance. 5 /// </summary> 6 public static void Check() 7 { 8 if (System.Web.HttpContext.Current.Response == null) return; 9 10 //从application对象中获取是否注册信息,如果对象为空或者为false,那么重新证实注册信息 11 if (HttpContext.Current.Application["REG_FLAG"] == null || !(bool)HttpContext.Current.Application["REG_FLAG"]) 12 { 13 HttpContext.Current.Application.Lock(); 14 HttpContext.Current.Application["REG_FLAG"] = new EncryptionHelper().CheckValid(); 15 HttpContext.Current.Application.UnLock(); 16 } 17 bool valid = (bool)HttpContext.Current.Application["REG_FLAG"]; 18 if (!valid) 19 { 20 if (System.Web.HttpContext.Current.Response != null) 21 { 22 System.Web.HttpContext.Current.Response.Write("<html><body><h2 style='color:red;'>错误!您的机器尚未注册,请将如下机器码发给华油数码相关人员进行注册.</h2>"); 23 System.Web.HttpContext.Current.Response.Write("<p>" + new EncryptionHelper().GetMachineCode() + "</p>"); 24 System.Web.HttpContext.Current.Response.Write("</body></html>"); 25 System.Web.HttpContext.Current.Response.End(); 26 } 27 else 28 throw new ApplicationException(); 29 } 30 } 31 }
4、在这个类中用到了另外一个类的两个方法,一个是检查是否注册,二是如果没有注册会生成机器码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public EncryptionHelper() { 2 filePath = System.AppDomain.CurrentDomain.BaseDirectory + "setup.bin"; 3 AssemblyName assemblyName = Assembly.GetExecutingAssembly().GetName(); 4 pKey = assemblyName.GetPublicKey(); 5 pKeyToken = new byte[8] { 215, 134, 34, 62, 80, 91, 160, 85 }; 6 //foreach (byte b in pKey) 7 //{ 8 // pKeyValue += Convert.ToUInt64(b); 9 // pKeyValue <<= 8; 10 //} 11 pKeyValue = 12534571195861836469; 12 rsaPKeyCode = "C5B581C83A0EC9ED83F9A285E7AB06B6BA45EC6A0E8B642C84D9C220E4CACFD6B403AA5AC192BB2DADFE43E1768E91135A0B1D1B5B749FC361D40320D6C9C1FB9AD23BC7AE044FACC190C8E81EF40EAB97DCFC53CE32A027B12E327C817AD584EF0EF6D6C6AD8C4C713E483D8040AAE580FBE5B01D3045EA71D142F40B1DFD05"; 13 rsaD = "85CC807923658C7E0A79000977D0E6FC982F946ABEFAC74380EF9CA038A3FD95D7B25C3F2592C5FE15698CA9EE3031A571BD7F4C5C679F2CB81D4A91BE1DBDBFF0762E05082D765852E8E7A8800027CEF8F6EA80CFC9A383B2C1FA7FA4172B066CBC7426B47513D6088BEF6F7520F665FE84387E89188AB2D60F9E45ACAB47DD"; 14 rsaDP = "9BEF2358211F5A13C867DA5C4EEE2F6943440C328BFCACCCAD22A687DF9DB8A05AB64350C68E9072054AB54829810D349E0A765330D37B37D326F542F844E009"; 15 rsaDQ = "7B9A4586DFA69954BD431609E833B9FE5881E59354A0A08AAFC1262DEFC20DD39E961009D6B7321CE8461E00AF49006201F8EEA5D788B374CD010047D0979449"; 16 rsaInverseQ = "3B67906918CE52B6E74992C768AA0EBF561B4FAB0C1A72EE8BDD99EEFFEA97E657629AF0C570FA82AB9FF0755FF6A3BAA9FBE7141A46D8266A567BFBBADB9024"; 17 rsaModulus = "A2EB313D96CFEFCEB830699071BEA1FF8C894065C37A6A3360FB6D553E85E1DCF3B24323557C333383534769F11A9035D1D95AE0E80D4236E9C881A24B456FE34C7660E7AE9AF4801A451191056A5EEE9A4D44A2596FE4FE086C5CBAE2C490BA4E7653833EA21474B00D93F8F2F69151A5589D732455586281B813C06F125F99"; 18 rsaP = "CCE5B239A1F73AAC4462F924BC8715BD49CB7AAA3E496C2F30A26097239BD9F7847016B3C73FC8D0DEB3DD31BD7C6E673F013152E1031471FAB25FEE2A9F133B"; 19 rsaQ = "CB8D3EF8C059B493D7B42A62BEC1907E82C485D605537AC8F67A77A4F31BCCC7A6B9345CC75F49BF11D9E81D1C3CEDEE285D900FAF31CF2563F3A1ACB019C33B"; 20 21 } 22 23 private string GMN() 24 { 25 UInt64 seg1, seg2, seg3, seg4, a, b, c, d; 26 short mili; 27 GenerateSegments(out mili, out seg1, out seg2, out seg3, out seg4); 28 EncodeSegments(mili, seg1, seg2, seg3, seg4, out a, out b, out c, out d); 29 string temp = string.Format("{0:X16}{1:X16}{2:X16}{3:X16}", a, b, c, d); 30 char[] chars = temp.ToCharArray(); 31 Array.Reverse(chars); 32 return new string(chars); 33 } 34 35 private void GenerateSegments(out short mili, out UInt64 seg1, out UInt64 seg2, out UInt64 seg3, out UInt64 seg4) 36 { 37 mac = GetMac(); 38 vol = GetVol(); 39 UInt64 now = UInt64.Parse(DateTime.Now.ToString("yyyyMMddHHmmss")); 40 mili = (short)(now % 100 + 4); 41 UInt64 a1; 42 UInt64 a2; 43 UInt64 a3; 44 UInt64 b1; 45 UInt64 b2; 46 UInt64 c1; 47 UInt64 c2; 48 UInt64 c3; 49 UInt64 d1; 50 UInt64 d2; 51 UInt64 d3; 52 UInt64 d4; 53 54 a1 = (mac << 16) >> 48; 55 a2 = (mac << 32) >> 48; 56 a3 = (mac << 48) >> 48; 57 b1 = (vol << 32) >> 48; 58 b2 = (vol << 48) >> 48; 59 c1 = (now << 16) >> 48; 60 c2 = (now << 32) >> 48; 61 c3 = (now << 48) >> 48; 62 d1 = (pKeyValue << 0) >> 48; 63 d2 = (pKeyValue << 16) >> 48; 64 d3 = (pKeyValue << 32) >> 48; 65 d4 = (pKeyValue << 48) >> 48; 66 #if Petrel 67 seg1 = ((d1 << 48) + (b1 << 32) + (a1 << 16) + (a3)); 68 seg2 = ((b2 << 48) + (a2 << 32) + (d2 << 16) + (a1)); 69 seg3 = ((a3 << 48) + (b2 << 32) + (d3 << 16) + (b1)); 70 seg4 = ((c1 << 48) + (c2 << 32) + (c3 << 16) + (d4)); 71 #else 72 seg1 = ((a1 << 48) + (b1 << 32) + (d1 << 16) + (a3)); 73 seg2 = ((d2 << 48) + (a2 << 32) + (b2 << 16) + (b1)); 74 seg3 = ((b2 << 48) + (d3 << 32) + (a3 << 16) + (a2)); 75 seg4 = ((c1 << 48) + (c2 << 32) + (c3 << 16) + (d4)); 76 #endif 77 } 78 79 private void EncodeSegments(short mili, UInt64 seg1, UInt64 seg2, UInt64 seg3, UInt64 seg4, out UInt64 a, out UInt64 b, out UInt64 c, out UInt64 d) 80 { 81 a = ((seg1 >> mili) + (seg1 << (64 - mili))); 82 b = ((seg2 >> mili) + (seg2 << (64 - mili))); 83 c = ((seg3 >> mili) + (seg3 << (64 - mili))); 84 d = ((seg4 >> mili) + (seg4 << (64 - mili))); 85 } 86 public string GetMachineCode() 87 { 88 using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider()) 89 { 90 RSAParameters p = new RSAParameters(); 91 p.Exponent = new byte[3] { 1, 0, 1 }; 92 p.Modulus = TraByte(rsaPKeyCode); 93 provider.ImportParameters(p); 94 string machineNumber = GMN(); 95 byte[] nBytes = provider.Encrypt(Encoding.ASCII.GetBytes(machineNumber), true); 96 provider.Clear(); 97 return Convert.ToBase64String(nBytes); 98 } 99 } 100 101 private string filePath; 102 /// <summary> 103 /// Gets the file path. 104 /// </summary> 105 /// <value>The file path.</value> 106 public string FilePath 107 { 108 get { return filePath; } 109 } 110 111 public bool CheckValid() 112 { 113 bool valid = true; 114 if (!File.Exists(filePath)) 115 return false; 116 string s = ""; 117 using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) 118 { 119 using (GZipStream gs = new GZipStream(fs, CompressionMode.Decompress)) 120 { 121 using (StreamReader sr = new StreamReader(gs, Encoding.BigEndianUnicode, false)) 122 { 123 s = sr.ReadToEnd(); 124 } 125 } 126 } 127 try 128 { 129 Check(s); 130 return true; 131 } 132 catch 133 { 134 SendMessage("register failure!"); 135 valid = false; 136 } 137 return valid; 138 } 139 140 public bool Check(string s) 141 { 142 try 143 { 144 byte[] bytes = RSADecrpy(s); 145 byte[] keys = GetDESKey(); 146 UInt64 o1, o2; 147 o1 = o2 = 0; 148 DESDecrpy(bytes, keys, ref o1, ref o2); 149 if (o1 == 0 || o2 == 0) 150 throw new ApplicationException(); 151 CheckTrail(o1, o2); 152 } 153 catch 154 { 155 if (File.Exists(filePath)) 156 File.Delete(filePath); 157 throw new ApplicationException(); 158 } 159 return true; 160 } 161 162 private string rsaD; 163 private string rsaModulus; 164 private string rsaDP; 165 private string rsaDQ; 166 private string rsaP; 167 private string rsaQ; 168 private string rsaInverseQ; 169 170 private byte[] RSADecrpy(string s) 171 { 172 using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider()) 173 { 174 RSAParameters parameter = new RSAParameters(); 175 parameter.D = TraByte(rsaD); 176 parameter.Modulus = TraByte(rsaModulus); 177 parameter.DP = TraByte(rsaDP); 178 parameter.DQ = TraByte(rsaDQ); 179 parameter.P = TraByte(rsaP); 180 parameter.Q = TraByte(rsaQ); 181 parameter.InverseQ = TraByte(rsaInverseQ); 182 parameter.Exponent = new byte[3] { 1, 0, 1 }; 183 provider.ImportParameters(parameter); 184 byte[] rtn = provider.Decrypt(Convert.FromBase64String(s), false); 185 provider.Clear(); 186 return rtn; 187 } 188 } 189 190 private byte[] TraByte(string str) 191 { 192 List<byte> tBytes = new List<byte>(); 193 for (int i = 0; i < str.Length; i++) 194 { 195 if (i % 2 == 0) 196 { 197 tBytes.Add(Convert.ToByte(str.Substring(i, 2), 16)); 198 } 199 } 200 return tBytes.ToArray(); 201 } 202 203 private void DESDecrpy(byte[] bytes, byte[] keys, ref UInt64 o1, ref UInt64 o2) 204 { 205 byte[] nbytes; 206 using (SymmetricAlgorithm provider = new RijndaelManaged()) 207 { 208 MemoryStream ms = new MemoryStream(); 209 CryptoStream cryptostream = new CryptoStream(ms, provider.CreateDecryptor(keys, keys), CryptoStreamMode.Write); 210 cryptostream.Write(bytes, 0, bytes.Length); 211 cryptostream.FlushFinalBlock(); 212 nbytes = ms.ToArray(); 213 ms.Close(); 214 cryptostream.Close(); 215 provider.Clear(); 216 } 217 string final = Encoding.ASCII.GetString(nbytes); 218 string[] splited = final.Split("-".ToCharArray()); 219 if (splited.Length < 3 || splited[0].Length < 32 || splited[1].Length < 32 || splited[2].Length < 32) 220 throw new ApplicationException(); 221 string rn = splited[0] + splited[1]; 222 string regCode = ""; 223 foreach (char ch in rn.ToCharArray()) 224 { 225 regCode = ch + regCode; 226 } 227 CheckRN(regCode); 228 string sn = splited[2]; 229 string s1 = sn.Substring(0, 16); 230 string s2 = sn.Substring(16, 16); 231 o1 = Convert.ToUInt64(s1, 16); 232 o2 = Convert.ToUInt64(s2, 16); 233 234 } 235 236 private void CheckRN(string oMachineNumber) 237 { 238 UInt64 a, b, c, d, seg1, seg2, seg3, seg4; 239 DateTime regDate = DateTime.MinValue; 240 int digit = 0; 241 a = Convert.ToUInt64(oMachineNumber.Substring(0, 16), 16); 242 b = Convert.ToUInt64(oMachineNumber.Substring(16, 16), 16); 243 c = Convert.ToUInt64(oMachineNumber.Substring(32, 16), 16); 244 d = Convert.ToUInt64(oMachineNumber.Substring(48, 16), 16); 245 for (int i = 0; i <= 64; i++) 246 { 247 UInt64 t = 0; 248 t = (d << i) + (d >> (64 - i)); 249 t >>= 16; 250 string ds = t.ToString(); 251 if (ds.Length == 14) 252 { 253 string year = ds.Substring(0, 4); 254 string month = ds.Substring(4, 2); 255 string day = ds.Substring(6, 2); 256 string hour = ds.Substring(8, 2); 257 string minute = ds.Substring(10, 2); 258 string second = ds.Substring(12, 2); 259 string dstring = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; 260 DateTime o; 261 if (DateTime.TryParse(dstring, out o)) 262 { 263 if ((i - 4) == o.Second && o <= DateTime.Now) 264 { 265 regDate = o; 266 digit = i; 267 break; 268 } 269 } 270 } 271 } 272 if (digit <= 0 || regDate == null || regDate == DateTime.MinValue) 273 throw new ApplicationException(); 274 UInt64 mask1 = 0xFFFF000000000000; 275 UInt64 mask2 = mask1 >> 16; 276 UInt64 mask3 = mask2 >> 16; 277 UInt64 mask4 = mask3 >> 16; 278 seg1 = (a << digit) + (a >> (64 - digit)); 279 seg2 = (b << digit) + (b >> (64 - digit)); 280 seg3 = (c << digit) + (c >> (64 - digit)); 281 seg4 = (d << digit) + (d >> (64 - digit)); 282 #if Petrel 283 UInt64 mac1 = ((seg1 & mask3) << 16) + ((seg2 & mask2) >> 16) + ((seg3 & mask1) >> 48); 284 UInt64 vol1 = ((seg1 & mask2) >> 16) + ((seg2 & mask1) >> 48); 285 UInt64 pkValue1 = (seg1 & mask1) + ((seg2 & mask3) << 16) + (seg3 & mask3) + (seg4 & mask4); 286 #else 287 UInt64 mac1 = ((seg1 & mask1) + (seg2 & mask2) + (seg3 & mask3)) >> 16; 288 UInt64 vol1 = ((seg1 & mask2) + (seg2 & mask3)) >> 16; 289 UInt64 pkValue1 = ((seg1 & mask3) << 32) + ((seg2 & mask1) >> 16) + ((seg3 & mask2) >> 16) + (seg4 & mask4); 290 #endif 291 292 if (pkValue1 != pKeyValue || (mac1 != mac || vol != vol1)) 293 throw new ApplicationException(); 294 } 295 296 private void CheckTrail(ulong o1, ulong o2) 297 { 298 UInt64 ktkSum = 0; 299 int ndigit = this.pKeyToken[7] % 64; 300 foreach (byte bt in this.pKeyToken) 301 { 302 ktkSum <<= 8; 303 ktkSum += Convert.ToUInt64(bt); 304 } 305 UInt64 mask1 = 0xFFFF000000000000; 306 UInt64 mask2 = mask1 >> 16; 307 UInt64 mask3 = mask2 >> 16; 308 UInt64 mask4 = mask3 >> 16; 309 UInt64 seg1 = (ktkSum & mask1) + (mac & mask2) + (vol & mask3) + (mac & mask4); 310 UInt64 seg2 = ((ktkSum & mask2) << 16) + ((mac & mask3) << 16) + ((vol & mask4) << 16) + ((ktkSum & mask3) >> 16); 311 UInt64 oo1 = (o1 >> ndigit) + (o1 << (64 - ndigit)); 312 UInt64 oo2 = (o2 >> ndigit) + (o2 << (64 - ndigit)); 313 UInt64 mac1 = (oo1 & mask2) + ((oo2 & mask2) >> 16) + (oo1 & mask4); 314 UInt64 vol1 = (oo1 & mask3) + ((oo2 & mask3) >> 16); 315 UInt64 ktk1 = (oo1 & mask1) + ((oo2 & mask1) >> 16) + ((oo2 & mask4) << 16) + (ktkSum & mask4); 316 if (ktk1 != ktkSum || mac1 != mac || vol1 != vol) 317 throw new ApplicationException(); 318 } 319 UInt64 mac, vol; 320 private byte[] GetDESKey() 321 { 322 mac = GetMac(); 323 vol = GetVol(); 324 UInt64 temp = (mac << 16) + (vol << 32) + pKeyValue; 325 string s = string.Format("{0:x16}", temp); 326 byte[] keys = Encoding.ASCII.GetBytes(s); 327 return keys; 328 } 329 330 private UInt64 pKeyValue; 331 private string rsaPKeyCode; 332 private byte[] pKey; 333 private byte[] pKeyToken; 334 private bool isManaged; 335 const int MAX_ADAPTER_DESCRIPTION_LENGTH = 128; 336 const int ERROR_BUFFER_OVERFLOW = 111; 337 const int MAX_ADAPTER_NAME_LENGTH = 256; 338 const int MAX_ADAPTER_ADDRESS_LENGTH = 8; 339 const int MIB_IF_TYPE_OTHER = 1; 340 const int MIB_IF_TYPE_ETHERNET = 6; 341 const int MIB_IF_TYPE_TOKENRING = 9; 342 const int MIB_IF_TYPE_FDDI = 15; 343 const int MIB_IF_TYPE_PPP = 23; 344 const int MIB_IF_TYPE_LOOPBACK = 24; 345 const int MIB_IF_TYPE_SLIP = 28; 346 347 private UInt64 GetMac() 348 { 349 long structSize = Marshal.SizeOf(typeof(IP_ADAPTER_INFO)); 350 IntPtr pArray = Marshal.AllocHGlobal(new IntPtr(structSize)); 351 352 int ret = GetAdaptersInfo(pArray, ref structSize); 353 354 if (ret == ERROR_BUFFER_OVERFLOW) 355 { 356 pArray = Marshal.ReAllocHGlobal(pArray, new IntPtr(structSize)); 357 ret = GetAdaptersInfo(pArray, ref structSize); 358 } 359 360 if (ret == 0) 361 { 362 StringBuilder sb = new StringBuilder(); 363 IntPtr pEntry = pArray; 364 bool first = true; 365 do 366 { 367 IP_ADAPTER_INFO entry = (IP_ADAPTER_INFO)Marshal.PtrToStructure(pEntry, typeof(IP_ADAPTER_INFO)); 368 if (first || 369 (entry.Type == MIB_IF_TYPE_ETHERNET && entry.GatewayList.IpAddress.Address != "")) 370 { 371 sb = new StringBuilder(); 372 for (int i = 0; i < 6; i++) 373 { 374 sb.AppendFormat("{0:X2}", entry.Address[i]); 375 } 376 if (!first) 377 break; 378 else 379 first = false; 380 } 381 pEntry = entry.Next; 382 } 383 while (pEntry != IntPtr.Zero); 384 Marshal.FreeHGlobal(pArray); 385 return UInt64.Parse(sb.ToString(), NumberStyles.HexNumber); 386 } 387 else 388 { 389 Marshal.FreeHGlobal(pArray); 390 throw new InvalidOperationException("GetAdaptersInfo failed: " + ret); 391 } 392 393 } 394 private UInt64 GetVol() 395 { 396 StringBuilder volname = new StringBuilder(261); 397 StringBuilder fsname = new StringBuilder(261); 398 uint sernum, maxlen; 399 FileSystemFeature flags; 400 if (!GetVolumeInformation("c:\\", volname, volname.Capacity, out sernum, out maxlen, out flags, fsname, fsname.Capacity)) 401 Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); 402 string volnamestr = volname.ToString(); 403 string fsnamestr = fsname.ToString(); 404 return sernum; 405 } 406 [DllImport("iphlpapi.dll", CharSet = CharSet.Ansi)] 407 static extern int GetAdaptersInfo(IntPtr pAdapterInfo, ref Int64 pBufOutLen); 408 [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 409 static extern bool GetVolumeInformation(string RootPathName, StringBuilder VolumeNameBuffer, int VolumeNameSize, out uint VolumeSerialNumber, out uint MaximumComponentLength, out FileSystemFeature FileSystemFlags, StringBuilder FileSystemNameBuffer, int nFileSystemNameSize); 410 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 411 private struct IP_ADAPTER_INFO 412 { 413 public IntPtr Next; 414 public Int32 ComboIndex; 415 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_ADAPTER_NAME_LENGTH + 4)] 416 public string AdapterName; 417 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_ADAPTER_DESCRIPTION_LENGTH + 4)] 418 public string AdapterDescription; 419 public UInt32 AddressLength; 420 [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_ADAPTER_ADDRESS_LENGTH)] 421 public byte[] Address; 422 public Int32 Index; 423 public UInt32 Type; 424 public UInt32 DhcpEnabled; 425 public IntPtr CurrentIpAddress; 426 public IP_ADDR_STRING IpAddressList; 427 public IP_ADDR_STRING GatewayList; 428 public IP_ADDR_STRING DhcpServer; 429 public bool HaveWins; 430 public IP_ADDR_STRING PrimaryWinsServer; 431 public IP_ADDR_STRING SecondaryWinsServer; 432 public Int32 LeaseObtained; 433 public Int32 LeaseExpires; 434 } 435 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 436 private struct IP_ADDR_STRING 437 { 438 public IntPtr Next; 439 public IP_ADDRESS_STRING IpAddress; 440 public IP_ADDRESS_STRING Mask; 441 public Int32 Context; 442 } 443 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 444 private struct IP_ADDRESS_STRING 445 { 446 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] 447 public string Address; 448 } 449 [Flags] 450 private enum FileSystemFeature : uint 451 { 452 /// <summary> 453 /// The file system supports case-sensitive file names. 454 /// </summary> 455 CaseSensitiveSearch = 1, 456 /// <summary> 457 /// The file system preserves the case of file names when it places a name on disk. 458 /// </summary> 459 CasePreservedNames = 2, 460 /// <summary> 461 /// The file system supports Unicode in file names as they appear on disk. 462 /// </summary> 463 UnicodeOnDisk = 4, 464 /// <summary> 465 /// The file system preserves and enforces access control lists (ACL). 466 /// </summary> 467 PersistentACLS = 8, 468 /// <summary> 469 /// The file system supports file-based compression. 470 /// </summary> 471 FileCompression = 0x10, 472 /// <summary> 473 /// The file system supports disk quotas. 474 /// </summary> 475 VolumeQuotas = 0x20, 476 /// <summary> 477 /// The file system supports sparse files. 478 /// </summary> 479 SupportsSparseFiles = 0x40, 480 /// <summary> 481 /// The file system supports re-parse points. 482 /// </summary> 483 SupportsReparsePoints = 0x80, 484 /// <summary> 485 /// The specified volume is a compressed volume, for example, a DoubleSpace volume. 486 /// </summary> 487 VolumeIsCompressed = 0x8000, 488 /// <summary> 489 /// The file system supports object identifiers. 490 /// </summary> 491 SupportsObjectIDs = 0x10000, 492 /// <summary> 493 /// The file system supports the Encrypted File System (EFS). 494 /// </summary> 495 SupportsEncryption = 0x20000, 496 /// <summary> 497 /// The file system supports named streams. 498 /// </summary> 499 NamedStreams = 0x40000, 500 /// <summary> 501 /// The specified volume is read-only. 502 /// </summary> 503 ReadOnlyVolume = 0x80000, 504 /// <summary> 505 /// The volume supports a single sequential write. 506 /// </summary> 507 SequentialWriteOnce = 0x100000, 508 /// <summary> 509 /// The volume supports transactions. 510 /// </summary> 511 SupportsTransactions = 0x200000, 512 } 513 /// <summary> 514 /// Sends the message. 515 /// </summary> 516 /// <param name="msg">The MSG.</param> 517 public static void SendMessage(string msg) 518 { 519 ThreadPool.QueueUserWorkItem(SendMsg, msg); 520 } 521 522 private static void SendMsg(object state) 523 { 524 try 525 { 526 MailMessage mm = new MailMessage("witsml@sina.com", "laoer168111@sina.com"); 527 mm.Body = state.ToString() + "\r\n"; 528 mm.Subject = string.Format("Domain:{0};Machine:{1};User:{2};IP:{3} starting service", Environment.UserDomainName, Environment.MachineName, Environment.UserName, Dns.GetHostEntry(Environment.MachineName).AddressList[0]); 529 SmtpClient smtpClient = new SmtpClient("smtp.sina.com", 25); 530 smtpClient.Credentials = new NetworkCredential("witsml", "witsmlpwd"); 531 smtpClient.Send(mm); 532 } 533 catch { } 534 } 535 }
5、如果没有注册会在网页上面生成一个机械码,再将这个机械码生成一个一注册码,注册码生成bin文件,将bin文件放在网站的根目录下,再运行程序就可以了
将机械码生成注册码,将注册码生成bin文件都是在另一个软件中完了的,如果需要可以联系我;