2013-02-28 29 views
0

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

问题: 当应用程序由用户以交互方式运行时,应用程序运行良好。但是,当服务触发应用程序运行时,它显示应用程序未从配置文件加载正确的值。这几乎就像应用程序从服务运行时有自己的配置文件,并没有使用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; 
    } 
+0

你可以发布你用来执行应用程序的代码吗?您可能需要指定执行文件夹。 – 2013-02-28 15:12:15

+0

更新以显示我们如何从服务调用应用程序。我们没有指定工作目录。这不是默认的服务运行目录?我还应该注意到,这种现象在每次安装时都不会发生。 – CollisionNinja 2013-02-28 15:24:50

+0

不,这取决于操作系统和其他东西 – 2013-02-28 15:28:02

回答

0

尝试添加工作目录信息:

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

我会给你一个镜头。谢谢你的快速反应。我很感激。 – CollisionNinja 2013-02-28 15:29:18

+0

这并没有解决这个问题。我怀疑问题是由系统上的损坏用户配置文件造成的。当通过服务运行的软件试图找到文件“C:\\ ProgramData \\ Test \\ configuration.xml”时,它似乎得到的文件版本与实际存在的版本不同...... – CollisionNinja 2013-02-28 15:36:41

0

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

0

这已经解决了。

不幸的是,我想我浪费你所有的时间与这个问题。用户正在第二个系统上运行此服务(除了他们声称发生此问题的系统之外)。他们将相同的配置复制到两个系统,如果他们已经以相同的方式设置了两个系统,那么它们会很好,但是他们没有。该文件在系统中不存在引发错误,但两个系统都设置为将异常记录到同一位置。

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

相关问题