【问题标题】:Windows Service not writing text file after installation in Windows Service SystemWindows 服务在 Windows 服务系统中安装后不写入文本文件
【发布时间】:2014-05-25 02:06:34
【问题描述】:

我制作了一个包含套接字连接代码的 Windows 服务。根据安装此 Windows 服务后的代码并启动后,它应该将一些消息写入文本文件,但我看不到任何消息写入文本文件。在包含 Windows 7 的本地 PC 中,我的此服务能够写入文本文件。 这是我的代码..

            try
            {
                using (StreamWriter writer = new StreamWriter(textfileSaveLocation, true))
                {
                    writer.WriteLine("Before Connection !");
                }

                client.Connect(new IPEndPoint(IPAddress.Parse(ip), intport));

                Thread.Sleep(5000);

                using (StreamWriter writer = new StreamWriter(textfileSaveLocation, true))
                {
                    writer.WriteLine("Connected To Machine !");
                }

            }
           catch (Exception ex)
            {
                // Log the error here.
                client.Close();

                using (StreamWriter writer = new StreamWriter(textfileSaveLocation, true))
                {
                    writer.WriteLine("Connection Error !");
                }

                continue;
            }

所以我的疑问是为什么我的服务在我的本地系统中执行时无法写入服务器文本文件。此外,服务器 PC 中还有其他文本文件正在从其他人制作的其他 Windows 服务获取消息.为什么在我的情况下会发生这种情况? 请帮我。 提前致谢。

【问题讨论】:

  • textfileSaveLocation 是绝对路径还是相对路径?如果它是相对路径,它会将文件存储在进程的工作目录中的某个位置,对于 Windows 服务,默认情况下为 C:\Windows\System32\(更准确地说是 %windir%\System32\) - 你可以找到通过调用System.Environment.CurrentDirectory静态属性的路径。
  • @HonzaBrestan"D:/logs/response.txt" 这是我要写的路径..我该如何使用你的建议。
  • 如果您使用绝对路径,这应该不是问题。在这种情况下,我建议遵循 raja 回答中的要点(第 1-3 点)。
  • @HonzaBrestan 帐户仅限 LocalSystem,文件夹路径正确,我以管理员权限运行服务
  • Process Monitor(可从 MS 网站获得)是解决此类问题必不可少的工具。

标签: c# windows windows-services windows-server-2008 text-files


【解决方案1】:

检查以下内容:

  1. 运行windows服务的账号对文件夹路径有写权限。
  2. 文件夹路径正确。
  3. 您可能在本地机器上以管理员身份运行该服务,因此它拥有所有权限。
  4. 同样在您的异常块中,确保记录 ex.ToString()。它提供了很多信息。
  5. 您的client.Close() 也可以引发异常。请注意这种情况。

如果存在文件访问问题,则放置一个 uber try/catch 块,并首先尝试将文本文件写入您知道每个人都可以访问的公共文件夹中。

【讨论】:

  • 同意 (+1) 真的应该尝试让客户实施 IDisposable 以解决第 5 号问题。
【解决方案2】:

serviceProcessInstaller 中,您应该将 Account 属性设置为 LocalSystem。这将导致服务被安装并在本地服务帐户上运行。

【讨论】:

    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多