我使用Visual Studio 2013编写并测试了一个C#应用程序。我已成功将应用程序部署到Windows 2008 R2服务器,并为应用程序创建了一个非特权的AD域帐户。我已为该非特权帐户分配了文件系统和注册表权限,并使其成为本地Distributed COM Users组的成员,因此它可以访问程序执行所需的资源。
以非特权用户身份登录到控制台后,我可以从命令框,“开始”菜单或双击可执行文件成功运行应用程序。所有这些工作都很好,没有错误,没有UAC提示。因此,如果应用程序按常规方式启动,则非特权帐户似乎具有正确的权限。
当我尝试使用相同的非特权帐户从任务计划程序自动运行此任务时,它成功启动,但随后在一个例程中使用.NET System.UnauthorizedAccessException中止。我不知道抛出异常的确切位置,但我认为它位于COM对象实例化的行上。
我已尝试使用和不使用任务计划程序选项“以最高权限运行”。如果启用该选项,则应用程序运行正常。禁用该选项后,应用程序将失败,如上所述。两种情况都使用相同的非特权帐户凭据。
我知道Task Scheduler默认情况下会异步启动应用程序。在早期,我必须使用“C:\ Windows \ System32 \ cmd.exe”作为应用程序配置任务计划程序,并使用“/ c myapp.exe”作为命令行选项。如果没有这个改变,程序会在启动时立即抛出AppCrash。我想我理解这个问题,并且我可以使用该解决方法,尽管如果Task Scheduler提供同步和异步启动选项会很好。
真正的问题是:为什么通过任务计划程序启动应用程序需要额外的权限,而不是按常规方式启动它?