当从任务调度程序执行时,SQLite reader.read()总是返回false



我有一个c#程序,使用SQLite数据库读取/写入数据。这个程序需要UAC提升,我要求它一直在运行。当我手动运行这个程序时,我必须"以管理员身份运行",我的SQLite数据库正常运行,能够读取/写入数据到数据库文件。然而,我的问题是,当我试图让这个程序在计算机启动时自动执行。

如前所述,我要求该程序始终执行。因此,我已经准备了一些东西,以便在程序崩溃时重新执行程序(这非常有效)。但是,我还需要在计算机重新启动时开始执行。通常这不是问题,但是程序需要UAC,我很少在UAC对话框上点击Yes,所以我四处阅读,似乎唯一的方法就是在任务调度程序中设置任务。因此,我设置了一个任务来在启动时运行它。经过测试,程序可以执行,但不能正常工作。经过进一步调试,我发现每次我的代码到达SQLiteDataReader.read()行时,即使我知道那里有记录,它似乎总是返回false,但这只发生在程序通过Task Scheduler执行时。似乎没有错误来自SQLite。我怀疑文件权限是问题,但不知道如何解决。

关于我已经尝试过的东西,有几件事需要注意。1)在任务调度程序中,我已经将其设置为使用相同的用户帐户执行,因为我一直使用手动运行它,这也是一个域管理员,管理员和本地管理员帐户。2)任务设置为"以最高权限运行"3)我已经将安全权限更改为完全控制几乎每个对象,我能想到的(管理员,域管理员,用户,每个人等)在程序的根文件夹和SQLite数据库文件。4)我甚至尝试过将整个应用程序移出程序文件文件夹,以防那里也涉及某种限制访问。

我绞尽脑汁想弄明白这件事。有什么下一步尝试的想法吗?或者其他解决方案,让它在没有用户交互的情况下在启动时正确执行?

我报告这个问题有点晚了。我太蠢了……任务调度程序只需要将应用程序文件文件夹路径包含为启动路径。所以它没有找到数据库文件,因为我的路径使用相对路径来引用。我个人不明白为什么这个不应该总是默认到应用程序的文件夹中,但你生活在其中,你学习,你的头撞在中间的一切。

最新更新