为什么我无法从Windows服务中获取此UNC路径?

时间:2013-07-09 19:31:45

标签: c# networking service unc

我正在使用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班级做了什么 - 但是为了平息这场风暴,这是答案Found Here

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

我的错误日志将我的回复交给我; 'system | ReadConfiguration:无法为Z:中不存在的文件实例化FileMonitor。 - 这实际上是我在上面的构造函数中生成的异常。

我尝试过使用各种方法来达到我的“来源”;包括使用UNC共享和映射驱动器,只会产生结果上的差异。

我接受了一个答案建议并运行了微软的Process Monitor,试图进一步研究这个问题,但是还没有在这个场所找到任何有助于我的信息。在我的过程中,我获得了数十个SUCCESS,直到我尝试达到共享 - 此时唯一的指示性结果是针对CreateFile操作的'NAME NOT FOUND',以及'a FILE LOCKED WITH ONLY READERS'片刻之后的'a' CreateFileMapping'调用。

该进程作为本地系统管理员帐户运行,在我的“用户空间”中,我有一个映射驱动器到我想要到达的同一位置,我可以完全操作。

1 个答案:

答案 0 :(得分:1)

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