从Windows服务触发应用程序无法找到文件?

时间:2013-02-28 15:10:40

标签: c# .net service

背景 我创建了一个服务,当满足某些条件时,它将触发应用程序的执行。此服务设置为在用于通过RDP登录系统的相同Windows用户帐户下运行。我还创建了通过此服务触发的.NET应用程序。此应用程序在磁盘上查找配置文件(位于应用程序的ProgramData文件夹中),使用配置文件中的设置来影响此应用程序的输出。

问题: 当用户以交互方式运行应用程序时,应用程序运行良好。但是,当服务触发应用程序运行时,应用程序似乎未从配置文件中加载正确的值。几乎就像从服务运行的应用程序有自己的配置文件,并且没有使用ProgramData中的应用程序。

我只是想知道为什么会发生这种情况。当通过计划任务或作为服务运行应用程序时,我似乎从Windows 7和Windows 2008 R2中出现了一些奇怪的行为。这几乎就像交互式应用程序和服务应用程序在同一个用户运行的同一系统上有不同的环境......

注意:服务可执行文件也位于与触发的应用程序相同的文件夹中。我希望默认情况下工作目录是服务运行目录。

  public int ExecRun()
  {
    Process proc = new Process();
    proc.StartInfo = new ProcessStartInfo
    {
       FileName = "C:\\Program Files\\TEST\\runme.exe",
       Arguments = "/DS:TEMP"
    };

    proc.Start();
    proc.WaitForExit();

    return proc.ExitCode;
  }

3 个答案:

答案 0 :(得分:0)

尝试添加工作目录信息:

Process proc = new Process();
        proc.StartInfo = new ProcessStartInfo
        {
            FileName = "C:\\Program Files\\TEST\\runme.exe",
            WorkingDirectory="C:\\Program Files\\TEST",
            Arguments = "/DS:TEMP"
        };

答案 1 :(得分:0)

听起来,触发应用程序执行的服务也需要设置工作目录。如果您正在使用Process类,则需要将StartInfo.WorkingDirectory属性设置为应用程序所在的路径。

答案 2 :(得分:0)

这已经解决了。

不幸的是,我觉得我一直在浪费这个问题。用户在第二个系统上运行此服务(除了他们声称有此问题的系统之外)。他们将相同的配置复制到两个系统,如果他们以相同的方式设置两个系统,那就没问题,但是他们没有。系统上不存在抛出错误的文件,但两个系统都设置为将异常记录到同一位置。

用户必须禁用第二项服务,或正确设置配置文件。