0

我正在使用嵌入在 Asp.Net 网站中的 Firebird。当我以管理员身份运行 VS2010 时,我可以成功调用数据库,如果我以其他用户身份运行它,我会收到此错误:

System.IO.IOException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
   at System.Reflection.Emit.ModuleBuilder.SavePEFile(RuntimeModule module, String fileName, Int32 entryPoint, Int32 isExe, Boolean isManifestFile)
   at System.Reflection.Emit.ModuleBuilder.Save(String fileName, Boolean isAssemblyFile, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
   at System.Reflection.Emit.AssemblyBuilder.SaveNoLock(String assemblyFileName, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
   at System.Reflection.Emit.AssemblyBuilder.Save(String assemblyFileName, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine)
   at System.Reflection.Emit.AssemblyBuilder.Save(String assemblyFileName)
   at FirebirdSql.Data.Client.Native.FbClientFactory.CreateInstance(TypeBuilder tb)
   at FirebirdSql.Data.Client.Native.FbClientFactory.GenerateFbClient(String dllName)
   at FirebirdSql.Data.Client.Native.FbClientFactory.GetFbClient(String dllName)
   at FirebirdSql.Data.Client.Native.FesDatabase..ctor(String dllName, Charset charset)
   at FirebirdSql.Data.FirebirdClient.ClientFactory.CreateDatabase(FbConnectionString options)
   at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.Connect()
   at FirebirdSql.Data.FirebirdClient.FbConnectionPool.Create()
   at FirebirdSql.Data.FirebirdClient.FbConnectionPool.CheckOut()
   at FirebirdSql.Data.FirebirdClient.FbConnection.Open()

我已经在 IIS 中部署了该服务,但在调用它时出现了同样的错误。此外,为了使其在管理员帐户下工作,我必须将 fbemdeb.dll 复制到 windows/system32 中。

我已经从控制台应用程序中对数据库进行了相同的调用,它适用于所有用户帐户。我只有网络服务有这个问题。

有什么建议么?我正在使用火鸟 2.5

4

1 回答 1

1

听起来像是权限问题。运行应用程序池的用户可能无法保存在磁盘上。这是您发送的堆栈跟踪建议的:

   at System.Reflection.Emit.AssemblyBuilder.Save(String assemblyFileName)

看起来您正在使用某种技术在运行时构建程序集的 Firebird API。我会查看 API 文档,看看是否有办法配置任何临时目录或类似的东西。

于 2014-07-29T16:45:17.657 回答