为什么可以';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"。
该进程以本地系统管理员帐户的身份运行,在我的"用户空间"中,我有一个映射到我试图访问的同一位置的驱动器,我可以完全操作它。
您遇到了什么错误?您是否尝试运行ProcessMonitor(http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)看看发生了什么?您是否以该计算机的本地管理员身份运行?该本地管理员帐户是否确实有权访问有问题的共享?你试过使用psexec吗(http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx)以该用户的身份运行命令shell,并查看您是否真的有权访问该共享?