从任务计划程序执行时,SQLite reader.read() 总是返回 false
SQLite reader.read() always returning false when executed from Task Scheduler
我有一个 C# 程序,它使用 SQLite 数据库来 read/write 数据。该程序需要提升 UAC,我要求它始终处于 运行ning 状态。当我手动 运行 这个程序时,我必须 'Run as admin',我的 SQLite 数据库功能正常,能够 read/write 数据到数据库文件。但是,我的问题是当我尝试让这个程序在计算机启动时自动执行。
如前所述,我要求此程序始终执行。因此,我已经准备好一些东西,以便在程序崩溃时重新执行程序(效果很好)。但是,我还需要它在计算机重新启动时开始执行。通常这不是问题,但该程序需要 UAC,我很少会在 UAC 对话框上单击“是”,所以我阅读了一下,似乎唯一的方法是在任务计划程序中设置任务。所以,我在启动时设置了一个 运行 的任务。经测试,该程序确实可以执行但无法正常运行。经过进一步调试,我发现每次我的代码到达 SQLiteDataReader.read() 行时,它似乎总是 return false 即使我知道那里有记录,但这只发生在程序通过任务计划程序执行。 SQLite 似乎没有错误。我怀疑是文件权限问题,但不知道如何解决。
关于我已经尝试过的内容,有几点需要注意。
1) 在 Task Scheduler 中,我将其设置为使用与手动 运行 相同的用户帐户执行,这也是域管理员、管理员和本地管理员帐户。
2)任务设置为"run with highest privileges"
3) 我已经将程序根文件夹和 SQLite 数据库文件中几乎所有我能想到的对象(管理员、域管理员、用户、所有人等)的安全权限更改为完全控制。
4) 我什至尝试将整个应用程序移动到 Program Files 文件夹之外,以防那里也涉及某种受限访问。
我已经无计可施了。关于接下来要尝试什么的任何想法?或其他解决方案使其在启动时无需用户交互即可正确执行?
我报告这个问题有点晚了。愚蠢的我......任务计划程序只需要将应用程序文件夹路径作为启动路径。所以它没有找到数据库文件,因为我的路径使用相对路径来引用。我个人不明白为什么这不应该总是默认为应用程序的文件夹,但你生活和学习,并在两者之间的一切上努力。
我有一个 C# 程序,它使用 SQLite 数据库来 read/write 数据。该程序需要提升 UAC,我要求它始终处于 运行ning 状态。当我手动 运行 这个程序时,我必须 'Run as admin',我的 SQLite 数据库功能正常,能够 read/write 数据到数据库文件。但是,我的问题是当我尝试让这个程序在计算机启动时自动执行。
如前所述,我要求此程序始终执行。因此,我已经准备好一些东西,以便在程序崩溃时重新执行程序(效果很好)。但是,我还需要它在计算机重新启动时开始执行。通常这不是问题,但该程序需要 UAC,我很少会在 UAC 对话框上单击“是”,所以我阅读了一下,似乎唯一的方法是在任务计划程序中设置任务。所以,我在启动时设置了一个 运行 的任务。经测试,该程序确实可以执行但无法正常运行。经过进一步调试,我发现每次我的代码到达 SQLiteDataReader.read() 行时,它似乎总是 return false 即使我知道那里有记录,但这只发生在程序通过任务计划程序执行。 SQLite 似乎没有错误。我怀疑是文件权限问题,但不知道如何解决。
关于我已经尝试过的内容,有几点需要注意。 1) 在 Task Scheduler 中,我将其设置为使用与手动 运行 相同的用户帐户执行,这也是域管理员、管理员和本地管理员帐户。 2)任务设置为"run with highest privileges" 3) 我已经将程序根文件夹和 SQLite 数据库文件中几乎所有我能想到的对象(管理员、域管理员、用户、所有人等)的安全权限更改为完全控制。 4) 我什至尝试将整个应用程序移动到 Program Files 文件夹之外,以防那里也涉及某种受限访问。
我已经无计可施了。关于接下来要尝试什么的任何想法?或其他解决方案使其在启动时无需用户交互即可正确执行?
我报告这个问题有点晚了。愚蠢的我......任务计划程序只需要将应用程序文件夹路径作为启动路径。所以它没有找到数据库文件,因为我的路径使用相对路径来引用。我个人不明白为什么这不应该总是默认为应用程序的文件夹,但你生活和学习,并在两者之间的一切上努力。