Windows服务无法创建文本文件

时间:2013-01-10 08:44:44

标签: c# .net windows-services event-viewer

好的,这是我的OnStart方法

的代码
File.CreateText("test.txt");
StreamWriter write = File.AppendText("test.txt");
write.WriteLine("Hello world, the service has started");
write.Flush();
write.Close();

我已成功安装该服务。但是,当我开始时,我收到服务启动然后停止的消息。当我检查事件查看器时,它给了我这个

Service cannot be started. System.IO.IOException: The process cannot access the file 'C:\Windows\system32\test.txt' because it is being used by another process.

好的,这里发生了什么。因为ProcessInstaller设置为LocalSystem,所以我认为它不是一个权限问题。

4 个答案:

答案 0 :(得分:7)

您不需要使用第一个File.CreateText语句。这将在文件上创建一个未关闭的流编写器。

您的File.AppendText尝试在同一文件上创建新的StreamWriter,因此您会收到File in use错误。

此外,正如MSDN所说,如果文件不存在,您的文件将被创建。

  

如果path指定的文件不存在,则创建该文件。如果文件存在,则对StreamWriter的写操作会将文本附加到文件

答案 1 :(得分:5)

你可以这样使用

string path = @"path\test.txt";
if (!File.Exists(path)) 
{
  // Create a file to write to. 
   using (StreamWriter sw = File.CreateText(path)) 
   {
     sw.WriteLine("Hello world, the service has started");
    }   
 }

答案 2 :(得分:3)

我认为一行代码就足够了。

  File.AppendAllText(@"path\test.txt", "Hello world, the service has started");

将指定的字符串追加到文件中,如果该文件尚不存在,则创建该文件。

答案 3 :(得分:0)

您应该尝试使用该文件的完整路径,Windows服务在C:\ Windows \ System32文件夹中运行

string fileName="E:\\Service\\file.txt"
File.Create(file);