0
私はClickOnceを使ってアプリケーションを開発しており、それぞれのインストールを区別できる必要があります。 インストールごとに変更される何らかの種類のデプロイメントIDを取得する方法はありますか(同じPCの2人のユーザーが2つの異なるIDを取得するようになります)。ClickOnceのインストールの手引きを取得する
おかげ
私はClickOnceを使ってアプリケーションを開発しており、それぞれのインストールを区別できる必要があります。 インストールごとに変更される何らかの種類のデプロイメントIDを取得する方法はありますか(同じPCの2人のユーザーが2つの異なるIDを取得するようになります)。ClickOnceのインストールの手引きを取得する
おかげ
いくつかのより多くの研究の後、私は何かを見つけることができませんでしたので、私は、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
アンインストールエントリがレジストリに配置された場合、私はちょうどチェック。これは 'HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ [SomeId]'にあり、多分これを使うことができます。しかし、あなたは自分で確認する必要があります、私は唯一の私は現在自分のPCにインストールされている唯一のクリックのためにそれを見つけた。私は更新時にそれが変化するかどうか、それがユーザーとPCで異なるかどうかはわかりません – grek40