我有一个C#控制台应用程序,可以从app.config
读取应用程序设置。控制台应用程序的目标是Windows计划程序任务的操作。它每天运行一次。
由于添加要从配置文件中读取的代码,应用程序仅在由任务计划程序运行时崩溃。手动运行时(从命令提示符或通过在其文件夹中单击它)),应用程序运行时没有任何问题,它完全按预期工作。
以下是从应用设置部分中读取的代码:
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中。我环顾了S.O.并且this post表明它可能是读取权限问题,但如果任务在我的域帐户下运行且具有最高权限,那还可以吗?请注意,如果我从命令提示符或通过单击它手动运行它,它运行正常。
如果控制台应用程序已配置为在Windows任务计划程序下运行,我如何可靠地让控制台应用程序读取它app.config
?
答案 0 :(得分:2)
解决了它。事实证明我有一些遗留位运行代码如下:
Configuration config = ConfigurationManager.OpenExeConfiguration("<app exe name>");
这是抛出异常的地方,而不是我的问题中的代码。对我感到羞耻。应该更彻底地调试。我删除了所有内容,并通过调用:
替换了上面的本地配置对象用法ConfigurationManager.AppSettings["someValue"];
答案 1 :(得分:0)
它肯定是一个权限问题,可能不仅仅是读取权限。要检查的事项:
您的帐户或其他帐户下运行的任务是?如果此应用程序存储在本地配置文件中的目录下,则默认情况下其他管理员帐户也没有权限(他们必须手动设置权限)。尝试将应用程序移动到硬盘驱动器上的本地文件夹,并根据需要设置权限。
尝试为存储应用程序的目录设置审核设置。如果是权限问题,则安全日志会告诉您更多有关被拒绝的原因和原因。