2013-04-27 73 views
2

我正在制作一个WCF应用程序,我只想在连接到服务器的用户上添加一些额外的信息。它不一定是唯一的ID。生成一个PC ID(不需要是唯一的+不需要管理员)

我真的很想要简单的东西。这会工作吗?

static UserInfo() // d-constructor 
     { 

      MachineID = Environment.MachineName; 
      MachineID = MachineID + Convert.ToString(Environment.OSVersion); 
      MachineID = MachineID + Environment.ProcessorCount; 
      MachineID = MachineID + Environment.UserName; 
      MachineID = MachineID + Environment.Version; 
     } 
+1

你试过吗?它有用吗? – erikkallen 2013-04-27 08:50:44

+1

@erikkallen我不问实际的代码是否有效。我问的是如果我正在使用正确的方式来实现这一点。也许还有其他一些班(除Enviroment外)? – xperator 2013-04-27 08:57:38

+1

您的问题中唯一的问号是在“将这项工作”一词之后。 – erikkallen 2013-04-27 09:18:24

回答

3

当然,这将工作。我在LINQPad 4签入很快,它又回来了罚款:

MYMACHINEMicrosoft的Windows NT 6.1.7601服务包14myuser4.0.30319.296

你可能会考虑用下划线或类似的东西代替空格如果你希望字符串是自由的空间 - 也许......

MachineID = MachineID.Replace(' ', '_'); 

...添加到您的UserInfo()方法结束。

更新:下面

跟随评论,Windows 7 Help Forums有简单的步骤做一个快捷方式来运行一个命令,一个特定的用户:测试我设置一个快捷方式运行cmd.exe非管理员用户myuser,我为此目的创建的。再次,我在这里的测试是从命令行运行setsysteminfo作为myuser - 通过类比测试,但我认为是足够的。

UPDATE:

为了进一步跟进,我创建了另一个快捷方式运行LINQPad 4作为非管理员用户myuser,然后重新运行该代码:没有problemo测试这种方式太。我打算取悦。 :)

+1

所以它不需要任何管理员权限?我认为只有MachineName和Processorcount具有更高的唯一性,对吗?有没有其他的课程可以获得更多信息? – xperator 2013-04-27 08:54:43

+0

我刚加倍检查了需要管理权限的可能性:nope,作为非管理员用户都很好。这是有道理的,因为在命令行方面,你实际上只是获取'set'和'systeminfo'提供的信息。现在,也许一项政策(例如在AD域中)可能会以非管理员身份阻止运行;但作为非管理员用户运行本身不会导致您获取指定的环境信息时出现问题。 – J0e3gan 2013-04-27 09:00:56

+1

我不知道'ProcessorCount'会增加很多,除非您正在处理可能有名称冲突的机器的请求(例如> 1台机器名为MYMACHINE)。 IP地址可能值得考虑,但这取决于您的使用情况。 'MachineName'和'UserName'应该可以获得所需的大部分内容(即“(不需要是唯一的+不需要管理员)”)。 – J0e3gan 2013-04-27 09:08:57

相关问题