【问题标题】:Could not find a part of the path of a file when window service reads it窗口服务读取文件时找不到文件路径的一部分
【发布时间】:2016-02-05 21:05:11
【问题描述】:

我正在用 c# 编写一个窗口服务,我的服务读取一个文件(initialisation.ini),我使用下面的代码给出了这个文件的路径,它在读取这个文件时给出了错误(路径问题),我试过了在控制台应用程序中运行相同的代码进行测试,它可以在控制台应用程序中正常工作,但是当我尝试安装窗口服务时,only 下面会出现错误,我在文件中打印错误,如下所示在服务安装:

the error reading file is : System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Files\initialisation.ini'.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
   at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize)
   at System.IO.StreamReader..ctor(String path, Encoding encoding)
   at System.IO.File.InternalReadAllLines(String path, Encoding encoding)
   at ReadingFileFromFolder.Service1.readFile() in c:\Users\ACER\Desktop\KT-iNDIA\November\5thNovemberKtIndia2015\ReadingFileFromFolder\ReadingFileFromFolder\Service1.cs:line 60

在工作控制台应用程序上调试的实际路径是:

C:\Users\ACER\Desktop\KT-iNDIA\November\5thNovemberKtIndia2015\ReadingFileFromFolder\ReadingFileFromFolder\Files\initialisation.ini

我不知道为什么它在文本文件中将路径显示为C:\Files\initialisation.ini(在此错误中)。

我的错误对应的代码是:

            try
            {
                string appRootDir = new DirectoryInfo(Environment.CurrentDirectory).Parent.Parent.FullName;
                var filePathAndName = Path.Combine(appRootDir, "\\Files\\initialisation.ini");
                lines = File.ReadAllLines(filePathAndName);
                foreach (string line in lines)
                {
                    folderInvestigationBureau(line);                   
                }
            }
            catch (Exception e)
            {
                m_streamWriter.WriteLine("the error reading file is : " + e);
            }

编辑: 即使更改为string appRootDir = AppDomain.CurrentDomain.BaseDirectory; 我尝试打印 appRootDir 以获取运行可执行服务的路径,它也不会打印任何路径。 是否有任何与帐户相关的问题,这是我的项目安装程序属性http://prntscr.com/8z7s15,这是注册表中的条目http://prntscr.com/8z8ivu,另请注意,当我登录计算机打开帐户时,我需要提供密码。如果这就是问题

如何解决?

【问题讨论】:

    标签: c# .net directory windows-services filesystems


    【解决方案1】:

    你需要使用:AppDomain.CurrentDomain.BaseDirectory

    string appRootDir=AppDomain.CurrentDomain.BaseDirectory;
    

    如果这不是正确的路径,请评论你现在得到的位置

    【讨论】:

    • 它仍然给出同样的错误,请查看编辑以了解哪一行给出了这个错误。请注意,给定的代码在控制台应用程序中有效,但在窗口服务中无效,原因是support.microsoft.com/en-us/kb/827421,但是如何解决呢?
    • 您的 approotDir 是保存服务 exe 的位置吗?你从 AppDomain.CurrentDomain.BaseDirectory 得到的位置是什么
    • 不是服务的路径,是我的服务读取的文本文件的路径。
    • stackoverflow.com/questions/1343406/… 这是一个参考链接。为什么不应该依赖 Environment.CurrentDirectory。您从 AppDomain.CurrentDomain.BaseDirectory 获得的位置是什么
    • 我的问题的解决方案:)?
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    相关资源
    最近更新 更多