2013-02-20 48 views
0

我正在開發Windows應用商店應用(a.k.a metro app)。我需要以機器ID作爲GUID格式。如何在Windows 8中以GUID格式獲取硬件ID

我有這樣的代碼:

var token = HardwareIdentification.GetPackageSpecificToken(null); 
var hardwareId = token.Id; 
byte[] bytes = new byte[hardwareId.Length]; 
dataReader.ReadBytes(bytes); 
String machineId = BitConverter.ToString(bytes); 

設備ID是一個字符串,但它不匹配GUID。有人知道如何以GUID格式轉換此值?

+0

你能發表一個樣本字符串值嗎?爲什麼你需要轉換爲GUID? – 2013-02-20 01:49:20

+2

它只是不是一個GUID。它也改變。 http://msdn.microsoft.com/en-us/library/windows/apps/jj553431.aspx – 2013-02-20 01:56:53

+0

好的。我需要轉換爲GUID,因爲我必須調用一個接收GUID作爲機器ID的遺留服務。我知道這個字符串不是一個GUID,但我可以帶一些字節組來構建一個GUID。例如,我可以使用處理器+內存+ BIOS等來製作GUID並將其發送到我的服務 – 2013-02-20 03:13:04

回答

0

請嘗試下面的代碼。它基於另一個SO thread的代碼。

private async void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     //dataReader.ReadBytes(bytes); 
     String machineId = BitConverter.ToString(bytes); 


     Guid guid; 

     bool isDataAVailale = GuidTryParse(machineId, out guid); 

     myText.Text = guid.ToString(); 

    } 


    public static bool GuidTryParse(string s, out Guid result) 
    { 
     if (!String.IsNullOrEmpty(s) && guidRegEx.IsMatch(s)) 
     { 
      result = new Guid(s); 
      return true; 
     } 

     result = default(Guid); 
     return false; 
    } 

    static Regex guidRegEx = new Regex("^[A-Fa-f0-9]{32}$|" + 
          "^({|\\()?[A-Fa-f0-9]{8}-([A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}(}|\\))?$|" + 
          "^({)?[0xA-Fa-f0-9]{3,10}(, {0,1}[0xA-Fa-f0-9]{3,6}){2}, {0,1}({)([0xA-Fa-f0-9]{3,4}, {0,1}){7}[0xA-Fa-f0-9]{3,4}(}})$", RegexOptions.Singleline); 
相關問題