Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows服务中,在哪里放置补充文件?_C#_Windows Services_Filepath - Fatal编程技术网

C# 在Windows服务中,在哪里放置补充文件?

C# 在Windows服务中,在哪里放置补充文件?,c#,windows-services,filepath,C#,Windows Services,Filepath,好的,情况是这样的。我已经编写了一个Windows服务。将其作为一个“控制台”应用程序进行测试已经显示出了令人鼓舞的结果 不幸的是,我不知道把文件放在哪里。我有一些对应用程序至关重要的JSON数据。它在一个文件里。我不想在这方面谈太多细节,但我只想知道它必须在一个文件中,这是至关重要的。它不是一个配置文件,但它绝对是必需的 无论如何,我已经将该文件添加到我的windows服务项目中。问题是,我不能很好地找出正确的代码和设置,以便在安装服务时将文件放在正确的位置 这只是我编写的第二个Windows

好的,情况是这样的。我已经编写了一个Windows服务。将其作为一个“控制台”应用程序进行测试已经显示出了令人鼓舞的结果

不幸的是,我不知道把文件放在哪里。我有一些对应用程序至关重要的JSON数据。它在一个文件里。我不想在这方面谈太多细节,但我只想知道它必须在一个文件中,这是至关重要的。它不是一个配置文件,但它绝对是必需的

无论如何,我已经将该文件添加到我的windows服务项目中。问题是,我不能很好地找出正确的代码和设置,以便在安装服务时将文件放在正确的位置

这只是我编写的第二个Windows服务,第一个(几年前)不需要补充文件

我在Windows7上的VisualStudio2015中编写了该服务。我将在办公室的本地机器上进行测试,但最终将在生产机器上进行

请帮忙?关于我应该把文件放在哪里以及如何在代码中引用它,有什么想法吗

我看到一个网站说我应该使用以下内容:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
internal string FilePath = Directory.GetCurrentDirectory() + "\\" + Settings.Default.JsonFile;
但当我这样做时,这似乎没有帮助:

filePath = Environment.CurrentDirectory + "\\myfile.ext"
在这些情况下,文件路径从来都不是我的强项


非常感谢您的帮助。

好的,看来我已经解决了这个问题。我做了以下工作:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
internal string FilePath = Directory.GetCurrentDirectory() + "\\" + Settings.Default.JsonFile;
  • 在我实际的“服务”项目中,我添加了我需要的文件
  • 在服务的“计划”中,我做了以下工作:

    System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
    
    internal string FilePath = Directory.GetCurrentDirectory() + "\\" + Settings.Default.JsonFile;
    
    System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory)

    ServiceBase[]ServicesToRun

    ServicesToRun=新的ServiceBase[] { 新MyService() };

    ServiceBase.Run(ServicesToRun)

  • 在监控一切的类中,我有以下几点:

    System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
    
    internal string FilePath = Directory.GetCurrentDirectory() + "\\" + Settings.Default.JsonFile;
    

    然后,我做了一些与本主题无关的其他调整,但上面的内容似乎起到了作用。

    好的,看起来我已经解决了这个问题。我做了以下工作:

    System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
    
    internal string FilePath = Directory.GetCurrentDirectory() + "\\" + Settings.Default.JsonFile;
    
  • 在我实际的“服务”项目中,我添加了我需要的文件
  • 在服务的“计划”中,我做了以下工作:

    System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
    
    internal string FilePath = Directory.GetCurrentDirectory() + "\\" + Settings.Default.JsonFile;
    
    System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory)

    ServiceBase[]ServicesToRun

    ServicesToRun=新的ServiceBase[] { 新MyService() };

    ServiceBase.Run(ServicesToRun)

  • 在监控一切的类中,我有以下几点:

    System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
    
    internal string FilePath = Directory.GetCurrentDirectory() + "\\" + Settings.Default.JsonFile;
    

    然后,我做了一些与本主题无关的其他调整,但上面的调整似乎起到了作用。

    我还没有测试过这一点,但我看不出它不起作用的原因:

    internal string FilePath = 
        System.IO.Path.Combine(
          System.AppDomain.CurrentDomain.BaseDi‌​rectory, 
          Settings.Default.JsonFile);
    

    我还没有测试过这个,但我看不出它不起作用的原因:

    internal string FilePath = 
        System.IO.Path.Combine(
          System.AppDomain.CurrentDomain.BaseDi‌​rectory, 
          Settings.Default.JsonFile);
    

    看起来这里有三个问题:(1)文件应该放在哪里;(2) 我如何让安装程序把它放在那里;以及(3)如何在代码中引用它。如果文件是只读的,我认为将其与服务可执行文件放在同一目录中是明智的。如何做到这一点取决于您使用的是哪种安装技术,尽管这是一种常见的情况,应该不难做到。至于在代码中访问它,我认为您所做的应该是可行的,但实际上不需要涉及当前目录,只需从
    构建路径即可。BaseDirectory
    看起来这里有三个问题:(1)文件应该放在哪里;(2) 我如何让安装程序把它放在那里;以及(3)如何在代码中引用它。如果文件是只读的,我认为将其与服务可执行文件放在同一目录中是明智的。如何做到这一点取决于您使用的是哪种安装技术,尽管这是一种常见的情况,应该不难做到。至于在代码中访问它,我认为您所做的应该是可行的,但实际上不需要涉及当前目录,只需从
    .BaseDirectory
    构建路径。这种方法仍然有点冒险,因为如果代码中有任何内容(包括.NET类或第三方库中的内容),它可能会崩溃决定更改当前目录。使用基本目录直接构建文件路径会更安全。谢谢,Harry!我当然会考虑这一点。这种方法仍然有点风险,因为如果代码中的任何内容(包括.NET类或第三方库)决定更改当前目录,它可能会崩溃。使用基本目录直接构建文件路径会更安全。谢谢,Harry!我当然会考虑到这一点。最好做
    FilePath=System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,Settings.Default.JsonFile)
    ,它删除了从
    JsonFile
    文本或
    BaseDirectory
    文本中显示额外
    \
    的任何可能的问题。最好执行
    FilePath=System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,Settings.Default.JsonFile)
    ,它删除了从
    JsonFile
    文本或
    BaseDirectory
    文本中显示额外
    \
    的任何可能问题。