Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite ExecuteReader可从控制台和表单应用程序工作,但不能从Windows服务工作_C#_Sqlite_Windows Services - Fatal编程技术网

C# SQLite ExecuteReader可从控制台和表单应用程序工作,但不能从Windows服务工作

C# SQLite ExecuteReader可从控制台和表单应用程序工作,但不能从Windows服务工作,c#,sqlite,windows-services,C#,Sqlite,Windows Services,我有一个SQLite数据访问提供程序库,它通过一个单例类提供对SQLite数据库(.db)的非SQL编程访问。这个库实际上使用SQLiteCommands来实现这种访问。问题是用于选择查询的SQLiteDataReader的ExecuteReader在WinForms和Console测试应用程序中运行良好,但在Windows服务中使用时给出null。服务和测试应用都使用相同的库。不会引发异常。查看以下示例代码: private SQLiteConnection slConn = null; pu

我有一个SQLite数据访问提供程序库,它通过一个单例类提供对SQLite数据库(.db)的非SQL编程访问。这个库实际上使用SQLiteCommands来实现这种访问。问题是用于选择查询的SQLiteDataReader的ExecuteReader在WinForms和Console测试应用程序中运行良好,但在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);
}
private SQLiteConnection slConn=null;
公共无效初始化()
{
尝试
{
slConn=新的SQLiteConnection(CreateIQDBConnString(Path.GetFileNameWithoutExtension(GetRegistry(PROJECT_Path_REG)));
slConn.Open();
if(slConn.State==System.Data.ConnectionState.Open)
{
初始化表();
}
}
捕获(例外e)
{
投掷e;
}
}
公共列表GetDevices()
{
尝试
{
列表设备=新列表();
使用(sqliter=getDeviceCommand())
{
SQLiteDataReader dr=r.ExecuteReader();
while(dr.Read())
{
添加(dr.ToIQDevice());
}
}
返回装置;
}
捕获(例外e)
{
投掷e;
}
}
私有SQLiteCommand getGetDeviceCommand()
{
返回新的SQLiteCommand(“从IQDEVICES中选择*”,slConn);
}

问题在于我编写的TOIQDevice扩展方法,其中一个Sqlite参数中有一个小错误,一旦修复了所述问题,问题就消失了,现在我可以通过ExecuteReader查看数据。

这主要是用户权限问题。我想你必须朝那个方向看。(试着把它放在
网络服务
)我试着把一个网络服务设置为SeviceCount,但设置为1。仍然ExecuteReader没有任何数据,2。现在,我的REST服务宿主ServiceHost未启动。但是,我是通过Allutil中的“以管理员身份运行”安装此服务的,并使用具有提升权限的TrayIcon应用程序启动/停止此服务。您知道什么是Windows服务吗?您知道用于执行此Windows服务的帐户是什么吗?那么对于这个帐户,您认为它可以访问注册表项或文件系统吗?如果您还不能回答这些问题,请尝试先为他们找到答案,然后重新访问此问题。@Lex Li,问题不在于帐户,实际上我的ToIQDevice扩展方法有一个错误,一旦修复,所述问题就会消失!