0

からアプリの設定を読み取る C# コンソール アプリケーションがありますapp.config。コンソール アプリケーションは、Windows スケジューラ タスクのアクションとして対象となります。1日1回運行しています。

構成ファイルから読み取るコードを追加したため、アプリはタスク スケジューラによって実行された場合にのみクラッシュします。手動で (コマンド プロンプトから、またはフォルダー内でクリックして) 実行すると、アプリケーションは問題なく実行され、期待どおりに動作します。

アプリ設定セクションから読み取るコードは次のとおりです。

int someValue = 1;

try
{
    if (ConfigurationManager.AppSettings["someValue"] != null)
        someValue = int.Parse(ConfigurationManager.AppSettings["someValue"].ToString());
}
catch(Exception exception)
{
    // Write to error log
}

これは、エラー ログに記録される例外です。

Exception: The type initializer for '<my application name>' threw an exception.
System.Configuration.ConfigurationErrorsException: An error occurred loading a configuration file: The parameter 'exePath' is invalid.
Parameter name: exePath ---> System.ArgumentException: The parameter 'exePath' is invalid.
Parameter name: exePath

タスクを最高の特権で実行できるようにしました。さまざまな方法 ( ) などで構成ファイルにアクセスしようとしましたConfiguration.OpenConfigurationExe(...)が、毎回同じ問題が発生します。.exe をディスク上のさまざまな場所に配置しようとしました。これは C:\Program Files にあります。私は SO を見回しましたが、この投稿は読み取り権限の問題である可能性があることを示唆していますが、タスクが私のドメインのアカウントで実行され、最高の権限を持っている場合、それはまだ可能ですか? コマンドプロンプトから手動で実行するか、クリックして実行すると、問題なく実行されることに注意してください。

app.configコンソール アプリケーションが Windows タスク スケジューラで実行するように構成されている場合、どのようにすれば確実にそれを読み取ることができますか?

4

2 に答える 2

2

解決しました。次のようなコードを実行しているレガシービットがいくつかあったことがわかりました。

Configuration config = ConfigurationManager.OpenExeConfiguration("<app exe name>");

これは、私の質問のコードではなく、例外がスローされた場所です。私を恥じてください。それをもっと徹底的にデバッグするべきでした。私はそれをすべて削除し、上記のローカル構成オブジェクトの使用を次の呼び出しに置き換えました。

ConfigurationManager.AppSettings["someValue"];
于 2013-09-19T23:48:11.733 に答える