【问题标题】:C# windows service not able to create file.please help me to solve the issues?C# windows 服务无法创建文件。请帮我解决问题?
【发布时间】:2012-07-16 11:46:09
【问题描述】:

我是 .Net、C# 和 Visual Studio 的新手。现在我想使用 c# 开发 windows 服务应用程序。 Windows 服务需要将一些数据写入某个文件。 我正在使用 visual studio 2010。我使用 windows xp 作为我的操作系统。我创建了一个 windows service.its 安装程序等。

当我将windows服务安装在非默认文件夹(c盘除外)以外的文件夹中时,运行服务后会创建文件并写入文本文件成功。

当我在默认位置安装服务时(安装时我无法默认路径)(请参考附图)

然后在安装之后我运行服务。但是文件没有创建并且没有抛出异常。以下是文件的编码sn-p。

字符串 logPath = AppDomain.CurrentDomain.BaseDirectory + "log\CastrolSdWindowsService_Log.txt";

fs = new FileStream(logPath, FileMode.Append, FileAccess.Write);
                fs.Write(bytes, 0, bytes.Length);
                fs.Flush();

我找不到文件没有在 C 盘中创建的原因。请帮我 欢迎大家提出意见。

对于技术术语中的错误,我深表歉意,因为我是 .net 和 c# 的新手。我不知道正确的术语。

【问题讨论】:

  • 看起来像是权限问题。服务的身份是什么?并且请不要写在 c:\program 文件中。选择另一个文件夹,例如 %APPDATA%。
  • 你所说的身份是什么意思。我听不懂你的话。请给出更多解释,因为我是微软技术的新手。所以不要误会我。
  • 服务将以用户身份运行。它可以是 SYSTEM、网络服务或特定用户帐户。
  • Program Files 文件夹由于病毒攻击等原因受到 Windows 的严格保护。将文件写入 Program Data 文件夹。
  • 这和我前段时间遇到的问题差不多,见Windows Service with NLog

标签: c# .net visual-studio-2010 windows-services windows-xp


【解决方案1】:

如 cmets 中所述,Program Files 目录将受操作系统保护,因此不是放置应用程序生成文件的理想位置。存储这些文件的最佳位置是应用程序数据文件夹。 .net 框架中有一些帮助方法,可帮助您通过利用 Environment 类和使用 Environment.SpecialFolder 枚举之一来获取文件夹路径来动态定位文件夹。

【讨论】:

    【解决方案2】:

    您可以选择(如上所述)更改日志文件的路径并将它们移到受保护的程序文件夹之外, 或者您可以更改 NTFS 权限以允许对要写入“程序文件/您的应用程序”文件夹中的那些日志文件和文件夹进行 WRITE/MODIFY。

    请注意,您的 Windows 服务应用程序没有以 SYSTEM 身份运行。 它可能是 NT AUTHORITY\LOCAL SERVICE 或 NT AUTHORITY\NETWORK SERVICE 运行您的服务,然后运行进程资源管理器,打开“USER”列并检查它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-10
      • 2022-12-17
      • 1970-01-01
      • 2012-12-24
      • 2012-10-14
      • 2023-03-20
      • 1970-01-01
      • 2011-09-16
      相关资源
      最近更新 更多