File.exists()为本地帐户中的服务返回false

时间:2013-12-18 12:21:58

标签: c# windows-services network-protocols

我有在本地系统帐户下运行的Windows服务。我正在检查File.Exist(网络中的文件)。这适用于用户帐户,但它对本地系统帐户中的file.exists()返回false。我无法使用用户帐户运行服务。提前谢谢。

protected override void OnStart(string[] args) {
  m_objLogFile.LogError("******************Servicestarted*****************", "", "");
  Thread th = new Thread(new ThreadStart(StartIndexing));
  th.Start(); 
} 
private void StartIndexing() 
{ 
  bool bVal = File.Exists(@"100.100.1.1\f\Files\abc.txt"); 
}

2 个答案:

答案 0 :(得分:4)

本地系统帐户(LSA)是一个特定于计算机的帐户 - 虽然它在计算机上具有高权限,但它没有权限在网络上具有任何权限。

要解决此问题:

  • 在具有网络访问权限的现有用户的凭据下运行服务
  • 或创建新的低权限域帐户并仅为其分配所需权限,然后使用该用户的凭据运行服务

您也不能使用100.100.1.1\f\Files\abc.txt作为文件的路径 - 首先尝试使用双反斜杠作为前缀:\\100.100.1.1\f\Files\abc.txt。如果没有双反斜杠,操作系统将在您当前的工作目录中搜索名为100.100.1.1的文件夹。 (请注意,您说这可以在普通用户凭据下工作 - 要么您错了,要么在此处复制代码时出错了。)

答案 1 :(得分:-1)

模拟您的帐户以访问该文件。

http://msdn.microsoft.com/en-us/library/ff647248.aspx