【问题标题】:Could not find a part of the path error when running windows service after installation安装后运行windows服务时找不到部分路径错误
【发布时间】:2018-10-10 06:29:39
【问题描述】:

我有一个machine 1,其中有一个共享文件夹,

`\\Machine1HostName\Share`

在其中我们有一个文件夹Files

现在我用下面的路径安装在machine 2 中的文件夹上方,

Z:\Files

我有一个window servivemachine 2 中运行,我试图从路径Z:\Files 获取文件。

var sourceFiles = Directory.GetFiles(@"Z:\Files").Select(f => new FileInfo(f));

当我将window servive 作为控制台应用程序以调试模式运行时,没有错误,但是当我安装它并尝试使用local system 帐户运行时,我遇到了错误,

Exception - Could not find a part of the path 'Z:\Files'.

这是完整的堆栈跟踪,

Exception -    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileSystemEnumerableIterator`1.CommonInit()
   at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
   at System.IO.Directory.GetFiles(String path)
   at ConsoleApp6.ConverterService.Start() in C:\Users\source\repos\ConsoleApp6\ConsoleApp6\ConverterService.cs:line 19

注意 - 如果我将路径从 "Z:\Files" 更改为 "\\Machine1HostName\Share\\Files",则在本地系统帐户下运行服务时会出现 NO 错误。

var sourceFiles = Directory.GetFiles(@"\\Machine1HostName\Share\\Files").Select(f => new FileInfo(f));

【问题讨论】:

    标签: c# service window


    【解决方案1】:

    如果您使用您的帐户登录并安装了共享,那么大多数情况下您使用另一个帐户进行服务,它不会知道这个安装的共享。像这样挂载共享不是特定于机器的,而是特定于用户的。

    您不需要挂载任何东西,而只需使用 unc 路径直接访问共享,例如: \\somemachine\somefolder

    【讨论】:

    • 我使用我的管理员帐户进行了安装,并且服务在本地系统帐户下运行。您的意思是两者不同,因此彼此不认识?
    • 是的,他们不知道帐户之间的挂载。有一些极端的 hack、登录脚本或组策略的东西在某些情况下可能会起作用,但直接使用 unc 路径会简单得多,很可能不需要更改任何代码。
    • 好的,我使用帐户A 和相同的帐户A 进行了安装,我也在运行我的窗口服务。即使这也不起作用,有什么原因吗?
    • 因为你挂载在当前用户会话中,服务也在账户A下运行,但需要交互登录,创建一个新会话。这里有一些关于此的讨论:stackoverflow.com/questions/182750/… 但从长远来看,如果您只是切换到 unc 共享而不是尝试让驱动器号在您的服务中工作,它会再次为您节省很多麻烦
    • 非常感谢托马斯
    猜你喜欢
    • 2017-01-10
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多