【问题标题】:Unable to open sqlite database file when program launch at windows startupwindows启动时程序启动时无法打开sqlite数据库文件
【发布时间】:2021-07-08 09:06:18
【问题描述】:

我通过以下代码将我的程序设置为在启动时启动:

Registry.CurrentUser
    .OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true)
    .SetValue(Application.ProductName, Application.ExecutablePath);

重新启动Windows并登录我的帐户(具有管理员权限)后,程序运行成功,但是当它尝试连接到sqlite文件时,遇到以下异常:

"ClassName": "System.Data.DataException",
  "Message": "初始化数据库时发生异常。详情请参阅 InnerException。",
  “数据”:空,
  “内部异常”:{
    "ClassName": "System.Data.Entity.Core.EntityException",
    "Message": "底层提供者打开失败。",
    “数据”:空,
    “内部异常”:{
      “错误代码”:14,
      "ClassName": "System.Data.SQLite.SQLiteException",
      "Message": "无法打开数据库文件",
      “数据”:空,
      “内部异常”:空,
      “帮助网址”:空,
      “堆栈跟踪字符串”:“
   在 System.Data.SQLite.SQLite3.Open(字符串 strFilename,字符串 vfsName,SQLiteConnectionFlags connectionFlags,SQLiteOpenFlagsEnum openFlags,Int32 maxPoolSize,布尔 usePool)
   在 System.Data.SQLite.SQLiteConnection.Open()
   在 System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.c.b__13_0(DbConnection t,DbConnectionInterceptionContext c)
   在 System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext](TTarget 目标,Action`2 操作,TInterceptionContext 拦截上下文,Action`3 执行,Action`3 执行)
   在 System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection 连接,DbInterceptionContext 拦截上下文)
   在 System.Data.Entity.Core.EntityClient.EntityConnection.b__55_0()
   在 System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute(操作操作)
   在 System.Data.Entity.Core.EntityClient.EntityConnection.Open()",
      “RemoteStackTraceString”:空,
      “远程堆栈索引”:0,
      "ExceptionMethod": "8\nOpen\nSystem.Data.SQLite,版本=1.0.113.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139\nSystem.Data.SQLite.SQLite3\nVoid Open(System.String, System.String, System. Data.SQLite.SQLiteConnectionFlags, System.Data.SQLite.SQLiteOpenFlagsEnum, Int32, Boolean)",
      “HResult”:-2147481601,
      “来源”:“System.Data.SQLite”,
      “WatsonBuckets”:空
    },
    “帮助网址”:空,
    “堆栈跟踪字符串”:“
   在 System.Data.Entity.Core.EntityClient.EntityConnection.Open()
   在 System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(布尔 shouldMonitorTransactions)
   在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
   在 System.Data.Entity.Core.Objects.ObjectContext.c__DisplayClass174_0.b__0()
   在 System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute[TResult](Func`1 操作)
   在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreCommand(TransactionalBehavior 交易行为,字符串 commandText,对象 [] 参数)
   在 System.Data.Entity.Internal.InternalContext.ExecuteSqlCommand(TransactionalBehavior transactionalBehavior,String sql,Object[] 参数)
   在 System.Data.Entity.Database.ExecuteSqlCommand(TransactionalBehavior transactionalBehavior,String sql,Object[] 参数)
   在 SQLite.CodeFirst.SqliteDatabaseCreator.Create(数据库 db,DbModel 模型)
   在 SQLite.CodeFirst.SqliteInitializerBase`1.InitializeDatabase(TContext 上下文)
   在 SQLite.CodeFirst.SqliteCreateDatabaseIfNotExists`1.InitializeDatabase(TContext context)
   在 System.Data.Entity.Internal.InternalContext.c__DisplayClass66_0`1.b__0()
   在 System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action 动作)",
    “RemoteStackTraceString”:空,
    “远程堆栈索引”:0,
    "ExceptionMethod": "8\nOpen\nEntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\nSystem.Data.Entity.Core.EntityClient.EntityConnection\nVoid Open()",
    “HResult”:-2146233087,
    “来源”:“实体框架”,
    “WatsonBuckets”:空
  },
  “帮助网址”:空,
  “堆栈跟踪字符串”:“
   在 System.Data.Entity.Internal.InternalContext.PerformInitializationAction(动作动作)
   在 System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
   在 System.Data.Entity.Internal.LazyInternalContext.c.b__58_0(InternalContext c)
   在 System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput 输入)
   在 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 动作)
   在 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
   在 System.Data.Entity.Internal.InternalContext.Initialize()
   在 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(类型 entityType)
   在 System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   在 System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   在 System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
   在 System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 源)
   在 Watcher.MainApplication..ctor()
   在 Watcher.Program.Main()",
  “RemoteStackTraceString”:空,
  “远程堆栈索引”:0,
  "ExceptionMethod": "8\nPerformInitializationAction\nEntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\nSystem.Data.Entity.Internal.InternalContext\nVoid PerformInitializationAction(System.Action)",
  “HResult”:-2146233087,
  “来源”:“实体框架”,
  “WatsonBuckets”:空

当我手动运行程序时,这个问题就消失了

我尝试使用文本文件而不是数据库,但是由 Windows 运行的程序创建的文件与手动运行的程序创建的文件不同。

如何在 Windows 10 上解决此问题?

【问题讨论】:

  • 这不是一个例外,这是一条信息。发布完整的异常文本。不仅仅是名称、消息或堆栈跟踪。发布Exception.ToString() 返回的完整字符串。运行应用程序的帐户可能没有读取 SQLite 文件的权限。该应用程序在哪个帐户中运行?提示:不是任何登录用户
  • 感谢您的关注,我更新了帖子,再次强调手动运行程序没有错误,这个问题只有在Windows启动时运行程序才会出现
  • 再一次,什么帐户在启动时运行该应用程序,当没有人登录时?这不是您的帐户。
  • 我猜 Windows 会将程序移动到另一个位置,例如沙盒,并尝试从那里运行程序
  • 登录我的帐户后,我是管理员,它运行程序

标签: c# winforms sqlite windows-10 startup


【解决方案1】:

当我在启动情况下重启运行时,当前目录是系统目录。
所以要解决这个问题,我需要使用完整路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2012-03-18
    相关资源
    最近更新 更多