0

我有一个 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 中。我环顾四周,这篇文章表明这​​可能是一个读取权限问题,但如果该任务在我的域帐户下运行并且具有最高权限,那还有可能吗?请注意,如果我从命令提示符手动运行它或单击它,它运行得很好。

app.config如果控制台应用程序已配置为在 Windows 任务计划程序下运行,我如何才能可靠地读取它?

4

2 回答 2

2

解决了。原来我有一些遗留位运行这样的代码:

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

这是抛出异常的地方,而不是我问题中的代码。真丢人。应该更彻底地调试。我将其全部删除,并用以下调用替换了上面的本地配置对象用法:

ConfigurationManager.AppSettings["someValue"];
于 2013-09-19T23:48:11.733 回答
0

这绝对可能是一个权限问题,而且可能不仅仅是读取权限。检查事项:

  1. 任务是在您的帐户下运行,还是在其他帐户下运行?如果此应用程序存储在本地配置文件的目录下,则默认情况下,即使其他管理员帐户也没有权限(他们必须手动设置权限)。尝试将应用程序移动到硬盘驱动器上的本地文件夹并根据需要设置权限。

  2. 尝试为您的应用程序所在的目录设置审核设置。如果是权限问题,那么安全日志将告诉您更多关于它被拒绝的内容和原因。

于 2013-09-19T22:50:27.647 回答