Oracle似乎已经做了一些不可能实现的事情(恕我直言):)
我有来自Oracle的服务(我想,不要拍我,我只是开发人员!)
Name =“Eclipse NodeManager的Oracle Enterprise Pack(C_Oracle_Middleware_Home_wlserver_12.1)”
所有87个字符。当我尝试通过使用System.ServiceProcess.ServiceController.get_ServicesDependedOn()调用来确定所依赖的服务时,我得到一个异常陈述
“Eclipse NodeManager的服务名称Oracle Enterprise Pack (C_Oracle_Middleware_Home_wlserver_12.1)包含无效字符, 是空的,或者太长(最大长度= 80)“
此名称也是服务的注册表项的名称。我的理解是这个属性(Win32_Service类上的Name)应该限制为80个字符。
当构造函数barfs无效但成功安装服务时,使用ServiceController类真的很难。 -__-
我的快速修复,因为我明天必须发送代码,是截断任何服务名称,我将其归结为80个字符并称之为“Hail Mary Fix”。
你们有没有找到解决方法的方法更好?我无法控制Windows在这个领域的松散程度,服务开发人员(Oracle)也没有遵守服务短名称的80-char限制。
帮帮我,欧比万! ;)
答案 0 :(得分:0)
你可能不得不寻找另一种方式。我反编译了ServiceController,我找到了一个已经烘焙了80个字符的方法。你可以改为使用sc.exe或其他东西。
// System.ServiceProcess.ServiceController
internal static bool ValidServiceName(string serviceName)
{
if (serviceName == null)
{
return false;
}
if (serviceName.Length > 80 || serviceName.Length == 0)
{
return false;
}
char[] array = serviceName.ToCharArray();
for (int i = 0; i < array.Length; i++)
{
char c = array[i];
if (c == '\\' || c == '/')
{
return false;
}
}
return true;
}