【发布时间】: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