MSDN documentation for ServiceController.GetServices规定该函数在
时会抛出ArgumentException
machineName参数的语法无效。
如何验证机器名称的有效语法?它与维基百科的Restrictions on valid host names类似吗?我想它至少要覆盖,但Windows是否对有效内容进行了进一步的限制?
答案 0 :(得分:1)
看看这个:http://support.microsoft.com/kb/909264
虽然它提到了Active Directory,但我相信NetBIOS名称部分适用于所有场景。
希望这有帮助。
斯
答案 1 :(得分:1)
.Net有一个API来验证指定的主机名是否是有效的DNS名称。 http://msdn.microsoft.com/en-us/library/system.uri.checkhostname(v=vs.110).aspx这可能是一次很好的运行时检查。使用此选项,您将不必为寻找非法字符或strlen限制的机器名创建解析器。
答案 2 :(得分:1)
这实际上并不像看起来那么容易回答。问题是机器名称通常不加改变地用于其他服务中的识别。因此可以只测试其有效性作为机器的名称(仅限字母数字字符,无控制字符,无空格,无扩展字符集),但根据您的解决方案,您可能需要验证它还可用作有效的DNS名称和也许还有其他一些服务?
我建议您测试NetBIOS和DNS名称的有效性,这是一个很好的页面,描述了http://support.microsoft.com/kb/909264的规则。