O que é um bom identificador único PC?
estive olhando para o código em este tutorial , e descobri que ele usa My.Computer.Name
para salvar configurações que não deveriam vaguear entre computadores. É totalmente possível, no entanto, que um usuário tenha dois PCs identicamente nomeados. Se eles queriam ter o mesmo nome de usuário em cada PC, por exemplo, eles podem muito bem acabar com dois PCs chamados Username-PC.
(o tutorial que eu liguei está em VB.Net, mas estou a implementá-lo em C#)
10 answers
Alguns bons identificadores:
- Endereço MAC: é bastante fácil de chegar, e geralmente é único. No entanto, ele pode ser falsificado / alterado com bastante facilidade, então ele depende de quão único ele precisa ser.
Número de série da CPU: não está disponível em muitos sistemas antigos, mas está lá. Confira esta página MSDN . Não vai mudar, mas Está ligado a um computador.
Número de série HDD: é provável que não mude, mas pode ser um incómodo se o HD falhar. Conferir esta página MSDN .
Se estiver no windows HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProductId
é único por máquina / por instalação do windows. onde como em algumas das outras respostas, como o endereço MAC, Proc SN, e HD SN vai ficar o mesmo entre as reinstalações do windows/situações de boot dual.
A verdadeira resposta a essa pergunta: não existe tal coisa.
Existem várias soluções" próximas o suficiente", mas cada uma delas tem a sua própria limitação.Todas as identificações de hardware - Hardware mudam. E, em muitos casos você pode alterar esses identificadores (por exemplo, MAC spoofing).
O SID, como já comentei, também não é assim tão bom, porque o SID não vai mudar se o computador for instalado a partir de uma imagem. O SID é gerado pela instalação do windows, se o windows não foi instalado, mas copiado de uma imagem, o SID não vai mudar (embora seja comum regenerá - lo por causa de um mito sobre "risco de segurança" - Você não pode contar com isso).
Nome de computador-bem, como mencionado, eles devem ser únicos, mas não é aplicado de forma alguma.Outra solução que você pode implementar é gerar o seu próprio identificador único e armazená-lo localmente (assumindo que você pode fazer tal coisa). Mais uma vez, esta solução não vai funcionar se o seu computador foi fotografado com a sua aplicação.
A melhor solução para você realmente depende do que você está tentando realizar. Eu tive o mesmo problema com uma rede bastante grande, e a melhor solução em meu caso era o nome do computador. Se você estiver absolutamente certo de que seu processo não será imageado, eu geraria um identificador único usando Guid porque provavelmente será o mais seguro.
Ver: Classe Win32_BIOS, http://msdn.microsoft.com/en-us/library/aa394077.aspx
using System.Management;
string UniqueMachineId()
{
StringBuilder builder = new StringBuilder();
String query = "SELECT * FROM Win32_BIOS";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
// This should only find one
foreach (ManagementObject item in searcher.Get())
{
Object obj = item["Manufacturer"];
builder.Append(Convert.ToString(obj));
builder.Append(':');
obj = item["SerialNumber"];
builder.Append(Convert.ToString(obj));
}
return builder.ToString();
}
Com uma lógica semelhante, também pode passar por"Win32_DiskDrive";
http://msdn.microsoft.com/en-us/library/aa394132.aspx ;
e obter "Número de série" para cada unidade física. Neste caso, o
foreach (ManagementObject item in searcher.Get())
Deve encontrar vários itens
Usa o endereço MAC do cartão de rede. É suposto ser único. Mas pode ser mudado. Depende de quão malicioso você espera que seus usuários sejam e quão crítico sua aplicação é.
Algum código de amostra para o fazer:
public string GetMACAddress() {
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
string MACAddress = String.Empty;
foreach (ManagementObject mo in moc) {
if (MACAddress == String.Empty) { // only return MAC Address from first card
if ((bool)mo["IPEnabled"] == true) MACAddress = mo["MacAddress"].ToString();
}
mo.Dispose();
}
return MACAddress;
}
Uma coisa que você pode usar é o MAC de qualquer interface de rede. Você também pode combinar várias fontes de informação. Como o número de série HDD, mac, tipo de processador para calcular um hash a partir dele.
Dá uma vista de olhos aqui: a obter a etiqueta de Serviço da Dell Machine usando a. net?
Podes tirar alguns dados únicos do registo.