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