2017-03-29 6 views
0

私はClickOnceを使ってアプリケーションを開発しており、それぞれのインストールを区別できる必要があります。 インストールごとに変更される何らかの種類のデプロイメントIDを取得する方法はありますか(同じPCの2人のユーザーが2つの異なるIDを取得するようになります)。ClickOnceのインストールの手引きを取得する

おかげ

+0

アンインストールエントリがレジストリに配置された場合、私はちょうどチェック。これは 'HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ [SomeId]'にあり、多分これを使うことができます。しかし、あなたは自分で確認する必要があります、私は唯一の私は現在自分のPCにインストールされている唯一のクリックのためにそれを見つけた。私は更新時にそれが変化するかどうか、それがユーザーとPCで異なるかどうかはわかりません – grek40

答えて

0

いくつかのより多くの研究の後、私は何かを見つけることができませんでしたので、私は、CPUのID、マザーボードの情報とユーザーGUIDをハッシュすることによってUIDを自分で作成することになりました。

CodeProject articleからいくつかのインスピレーションを得たとMSDN Forum question

Public Function SHA256Hash(ByVal s As String) As String 
    Dim hashFunction As SHA256 = SHA256Managed.Create 
    Dim bytes() As Byte = (New ASCIIEncoding).GetBytes(s) 
    Dim hash() As Byte = hashFunction.ComputeHash(bytes) 
    Return GetStringFromHash(hash) 
End Function 

Private _HardwareID As String 
Public Function HardwareID() As String 
    If String.IsNullOrWhiteSpace(_HardwareID) Then 
     _HardwareID = SHA256Hash(String.Format("CPU>>{0}|BASE>>{1}|USER>>{2}", cpuID, baseID, userID)) 
    End If 

    Return _HardwareID 
End Function 

Private Function identifier(ByVal wmiClass As String, ByVal wmiProperty As String) 
    Dim result As String = String.Empty 
    Dim mc As New Management.ManagementClass(wmiClass) 
    Dim moc As Management.ManagementObjectCollection = mc.GetInstances() 

    For Each mo As Management.ManagementObject In moc 
     'Only get the first one 
     If String.IsNullOrWhiteSpace(result) Then 
      Try 
       result = mo(wmiProperty).ToString 
      Catch ex As Exception 
      End Try 
     End If 
    Next 

    Return result 
End Function 

Private Function cpuID() As String 
    'Uses first CPU identifier available in order of preference 
    'Don't get all identifiers, as it is very time consuming 
    Dim retVal As String = identifier("Win32_Processor", "UniqueID") 
    If String.IsNullOrWhiteSpace(retVal) Then 'If no UniqueID, use ProcessorID 
     retVal = identifier("Win32_Processor", "ProcessorId") 
     If String.IsNullOrWhiteSpace(retVal) Then 'If no ProcessorId, use Name 
      retVal = identifier("Win32_Processor", "Name") 
      If String.IsNullOrWhiteSpace(retVal) Then 'If no Name, use Manufacturer 
       retVal = identifier("Win32_Processor", "Manufacturer") 
      End If 
     End If 
    End If 

    Return retVal 
End Function 

Private Function baseID() As String 
    Return String.Concat(identifier("Win32_BaseBoard", "Model"), _ 
         identifier("Win32_BaseBoard", "Manufacturer"), _ 
         identifier("Win32_BaseBoard", "Name"), _ 
         identifier("Win32_BaseBoard", "SerialNumber")) 
End Function 

Private Function userID() As String 
    Return System.DirectoryServices.AccountManagement.UserPrincipal.Current.Guid.Value.ToString 
End Function 
関連する問題