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が言うように、ファイルが存在しない場合はファイルが作成されます。

パスで指定されたファイルが存在しない場合は作成されます。ファイルが存在する場合は、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

1行のコードで十分だと思います。

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

指定された文字列をファイルに追加し、ファイルがまだ存在しない場合はファイルを作成します。

于 2013-01-10T13:26:32.433 に答える
0

C:\Windows\System32 フォルダーで実行される Windows サービスのファイルのフル パスを試してください。

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