Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows服务功能不正确_C#_Windows Services - Fatal编程技术网

C# Windows服务功能不正确

C# Windows服务功能不正确,c#,windows-services,C#,Windows Services,我目前正在创建一个Windows服务。我已经完成了所有工作,可以将其部署到我的测试服务器上。但是当我尝试启动服务时,我得到错误1:功能不正确。奇怪的是,它发生在一个方法调用上。相关代码部分如下所示: public CacheManager(Logger logger, QueueSettings settings) { _logger = logger; _logger.WriteLog("checkpoint #1.1"); FillCache(); _log

我目前正在创建一个Windows服务。我已经完成了所有工作,可以将其部署到我的测试服务器上。但是当我尝试启动服务时,我得到
错误1:功能不正确
。奇怪的是,它发生在一个方法调用上。相关代码部分如下所示:

public CacheManager(Logger logger, QueueSettings settings)
{
    _logger = logger;

    _logger.WriteLog("checkpoint #1.1");
    FillCache();
    _logger.WriteLog("checkpoint #1.2");
}

    private void FillCache()
    {
        _logger.WriteLog("checkpoint #1.1.1");
        Utils.RefreshSession(ref _session, _user, _password, _appServer);
        _logger.WriteLog("checkpoint #1.1.2");
        Parts = new PartCache(ref _session);
        _logger.WriteLog("checkpoint #1.1.3");
        Customers = new CustomerCache(ref _session);
        _logger.WriteLog("checkpoint #1.1.4");

        lastUpdate = DateTime.Now;
        _logger.WriteLog("checkpoint #1.1.5");
    }
根据日志,我正在到达检查点1.1,但不是检查点1.1.1。返回的错误是:

Could not start the JediProcessDocuments service on the local computer.

Error1: Incorrect function.

有什么想法吗?

因此,原来包含会话对象的DLL(代码示例中的变量_Session未部署)。我猜windows服务会推迟加载DLL,直到调用需要DLL的实际方法,并且在此之前不会检测到不存在的DLL。

如果将FillCache()代码内联到构造函数中会发生什么?它是否正确执行?是否有调用堆栈?FillCache与CacheManager在同一程序集中吗?问题可能在_logger.WriteLog()内,可能是在它写入输出之后?这个功能是做什么的?@Philipp:首先发生的事情是我打自己一巴掌,因为我没有想到这么明显的事情。当我尝试它时,我甚至没有到达检查点1.1(在创建CacheManager的类中有一个检查点1,所以我知道有些东西正在被执行)。@JohnD:对不起,我应该解释得更好:CacheManager是一个名为CacheManager的类的构造函数。FillCache是这个类的一个私有方法。我可以问你是如何解决这个问题的吗?我读了你的答案,但不能说我已经理解了(还是初级),我也犯了同样的错误。代码在我的windows 10计算机上运行,但一旦我将应用程序安装到windows server 2016,它就不再运行了。我使用kernell32.dll,我的应用程序是32bit@ShinoLex:IIRC项目中有一个dll未部署到服务器。事实证明,只有当需要一个需要该DLL的函数时,.NET才会首先加载一个.DLL。如果您看到相同的问题,请检查以确保所有DLL都已部署到服务器I已解决我的问题。这与缺少DLL无关,而不是我在机器上使用的函数似乎不适用于Linux文件系统。我在我的机器上用NTFS文件系统进行测试,它运行得很好,现在我必须找到另一种方法从linux存储上的文件夹中获取唯一标识符