【发布时间】:2013-10-09 16:31:01
【问题描述】:
我有一个 SQLite 数据访问提供程序库,它仅通过单例类提供对 SQLite 数据库 (.db) 的非 SQL 编程访问。这个库实际上使用 SQLiteCommands 来实现这种访问。问题是 SQLiteDataReader 的 SELECT 查询的 ExecuteReader 可以在 WinForms 和控制台测试应用程序中正常工作,但在 Windows 服务中使用时会给出 null。服务和测试应用程序都使用相同的库。没有抛出异常。看下面的示例代码:
private SQLiteConnection slConn = null;
public void Initialize()
{
try
{
slConn = new SQLiteConnection(CreateIQDBConnString(Path.GetFileNameWithoutExtension(GetRegistry(PROJECT_PATH_REG))));
slConn.Open();
if (slConn.State == System.Data.ConnectionState.Open)
{
InitializeTables();
}
}
catch (Exception e)
{
throw e;
}
}
public List<IIQDevice> GetDevices()
{
try
{
List<IIQDevice> devices = new List<IIQDevice>();
using (SQLiteCommand r = GetGetDevicesCommand())
{
SQLiteDataReader dr = r.ExecuteReader();
while (dr.Read())
{
devices.Add(dr.ToIQDevice());
}
}
return devices;
}
catch (Exception e)
{
throw e;
}
}
private SQLiteCommand GetGetDevicesCommand()
{
return new SQLiteCommand("SELECT * FROM IQDEVICES;", slConn);
}
【问题讨论】:
-
这主要是用户权限问题。我认为你必须朝那个方向看。 (试着把它放在
Network Services上) -
我尝试将 NetworkService 设置为 SeviceAccount,但是 1. 仍然 ExecuteReader 没有任何数据,2. 现在,我的用于 REST 服务托管的 ServiceHost 没有启动。但是,我通过“以管理员身份运行”InsallUtil 安装此服务,并使用具有提升权限的 TrayIcon 应用程序启动/停止服务。
-
你知道什么是Windows服务吗?您知道用于执行此 Windows 服务的帐户是什么吗?那么对于这个帐户,您认为它可以访问注册表项或文件系统吗?如果您还不能回答这些问题,请先尝试为他们找到答案,然后再重新访问此问题。
-
@Lex Li,不是账号的问题,其实我的 ToIQDevice 扩展方法有 bug,修复后问题就消失了!
标签: c# sqlite windows-services