0

背景: 特定の条件が満たされたときにアプリケーションの実行をトリガーするサービスを作成しました。このサービスは、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;
  }
4

3 に答える 3

0

作業ディレクトリ情報を追加してみてください。

Process proc = new Process();
        proc.StartInfo = new ProcessStartInfo
        {
            FileName = "C:\\Program Files\\TEST\\runme.exe",
            WorkingDirectory="C:\\Program Files\\TEST",
            Arguments = "/DS:TEMP"
        };
于 2013-02-28T15:27:21.633 に答える
0

アプリケーションの実行をトリガーするサービスも作業ディレクトリを設定する必要があるようです。クラスを使用している場合は、アプリケーションが存在するパスをプロパティProcessに設定する必要があります。StartInfo.WorkingDirectory

于 2013-02-28T15:28:29.310 に答える
0

これは解決されました。

残念ながら、この質問で時間を無駄にしてしまったと思います。ユーザーは、このサービスを 2 番目のシステム (この問題が発生していると主張したシステム以外) で実行しています。彼らは同じ構成を両方のシステムにコピーしましたが、両方のシステムを同じようにセットアップしていれば問題ありませんでしたが、残念ながらそうではありませんでした。エラーをスローしたシステムにはファイルが存在しませんでしたが、両方のシステムが同じ場所に例外を記録するように設定されていました。

ユーザーは、2 番目のサービスを無効にするか、構成ファイルを正しくセットアップする必要がありました。

于 2013-03-01T15:10:03.937 に答える