为什么可以';t我从Windows服务中找到了此UNC路径

本文关键字:服务 找到了 路径 UNC Windows 我从 为什么 | 更新日期: 2023-09-27 18:21:38

我正在C#中开发文件复制服务。该服务在我可以访问用户空间的环境中完美工作;然而,当我将其作为服务运行时,我开始遇到错误。

在这种情况下,有很多关于访问UNC共享的信息,但在寻求最有可能的解决方案后,我仍然没有找到。

在我的"故障"环境中,服务以"管理员"帐户的身份运行,我采取了几种方法;两者都使用映射的网络驱动器和特定的UNC共享,在这两种情况下都会得到相同的结果。

我的构造函数包含检测文件是否存在的逻辑,因此它应该是这个等式中唯一相关的部分;

    public FileMonitor(String TargetPath)
        : base()
    {
        if (String.IsNullOrEmpty(TargetPath))
        {
            throw new ArgumentNullException("Cannot instantiate FilesystemMonitor. TargetPath was not provided or is null.");
        }
        else
        {
            this.FileCache = new Dictionary<string, DateTime>();
            if (Directory.Exists(TargetPath))
            {
                this.TargetDirectory = new DirectoryInfo(TargetPath);
                return;
            }
            else if (File.Exists(TargetPath))
            {
                this.TargetFile = new FileInfo(TargetPath);
                return;
            }
            else
            {
                if (TargetPath.StartsWith("''''"))
                {
                    FileInfo Finfo = new FileInfo(TargetPath);
                    UNCHandler.connectToRemote(Finfo.DirectoryName, "administrator", "password");
                    if (Directory.Exists(TargetPath))
                    {
                        this.TargetDirectory = new DirectoryInfo(TargetPath);
                        return;
                    }
                    else if (File.Exists(TargetPath))
                    {
                        this.TargetFile = new FileInfo(TargetPath);
                        return;
                    }
                    else
                    {
                        throw new InvalidOperationException("Cannot instantiate FileMonitor for file that does not exist at " + TargetPath + ".");
                    }
                }
                else
                {
                    throw new InvalidOperationException("Cannot instantiate FileMonitor for file that does not exist at " + TargetPath + ".");
                }
            }
        }
    }

我上一句话的唯一例外是,可能需要知道我的UNCHandler类做什么——但为了平息这场风暴,这与的答案完全不同

需要明确的是,这里的问题是File.Exists和Directory.Exists检查失败,即使在尝试连接到远程系统之后也是如此。

我的错误日志给了我以下信息system|ReadConfiguration:无法为Z:处不存在的文件实例化FileMonitor。'-这实际上是我在上面的构造函数中生成的异常。

我尝试过使用各种方法来获取我的"来源";包括使用UNC共享和映射驱动器,但结果没有差异。

我接受了一个答案建议,并运行了微软的Process Monitor,试图进一步调查此事,但在这个地方还没有找到任何对我有帮助的信息。在我的过程中,我得到了几十个SUCCESS,直到我试图达到共享-在这一点上,唯一的指示结果是针对CreateFile操作的"NAME NOT FOUND",以及稍后针对"CreateFileMapping"调用的"FILE LOCKED WITH ONLY READERS"。

该进程以本地系统管理员帐户的身份运行,在我的"用户空间"中,我有一个映射到我试图访问的同一位置的驱动器,我可以完全操作它。

为什么可以';t我从Windows服务中找到了此UNC路径

您遇到了什么错误?您是否尝试运行ProcessMonitor(http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)看看发生了什么?您是否以该计算机的本地管理员身份运行?该本地管理员帐户是否确实有权访问有问题的共享?你试过使用psexec吗(http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx)以该用户的身份运行命令shell,并查看您是否真的有权访问该共享?