1

Oracle 似乎做了一些不应该做的事情(恕我直言):)

我有来自 Oracle 的服务(我想,不要开枪,我只是开发人员!)

名称 = "Oracle Enterprise Pack for Eclipse NodeManager (C_Oracle_Middleware_Home_wlserver_12.1)"

全部 87 个字符。当我尝试使用 System.ServiceProcess.ServiceController.get_ServicesDependedOn() 调用确定所依赖的服务时,我收到一个异常说明

“服务名称 Oracle Enterprise Pack for Eclipse NodeManager (C_Oracle_Middleware_Home_wlserver_12.1) 包含无效字符、为空或太长(最大长度 = 80)”

此名称也是服务的注册表项的名称。我的理解是这个属性(Win32_Service 类上的名称)应该限制为 80 个字符。

当构造函数拒绝无效但已成功安装的服务时,使用 ServiceController 类变得非常困难。-__-

我的快速解决方法是,因为我明天必须发送代码,所以我将任何服务名称截断为 80 个字符,并将其称为“Hail Mary Fix”。

你们有没有找到更好的解决方法?我无法控制 Windows 在该领域的松散程度,以及服务开发人员 (Oracle) 不遵守服务短名称的 80 字符限制。

帮帮我,欧比旺!;)

4

1 回答 1

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;
}
于 2015-02-25T16:37:33.313 回答