3

好的,这是我的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

4 回答 4

7

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

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

此外,正如 MSDN 所说,如果您的文件不存在,则会创建它。

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

于 2013-01-10T08:49:58.613 回答
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");
    }   
 }
于 2013-01-10T08:56:49.780 回答
3

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

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

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

于 2013-01-10T13:26:32.433 回答
0

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

string fileName="E:\\Service\\file.txt"
File.Create(file);
于 2015-09-23T21:25:52.940 回答