在进程中设置 TMP 环境变量后无法打开到 Jet 数据库的 OleDbConnection

Failing to open OleDbConnection to Jet database after setting TMP environment variable in the process

在此过程的早期,我将 TMP 环境变量设置为 Jet 数据库所在的同级文件夹。我使用此代码:

Environment.SetEnvironmentVariable("TMP", "<sibling to Jet database>");

当我调用 OleDbConnection.Open() 时,出现错误。
这是堆栈跟踪:

System.Data.OleDb.OleDbException (0x80004005): Unspecified error
   at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()  

如果我在 运行 进程之前的 shell 中设置环境变量而不是在进程中的代码中设置它,我不会收到错误。

set TMP=<sibling to Jet database>  

这是我的连接字符串:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\<sibling to TMP>\database.mdb;

我试图创建一个示例控制台应用程序,但它没有表现出相同的行为。它在那里工作。我看到错误的应用程序是目标 .NET Framework 版本设置为 .NET 4.6.1 的 WinForms 应用程序。

在 TMP 环境变量 的值中指定的文件夹 是否存在并且权限设置为对所有人完全控制。

即使我在 shell 中将 TMP 设置为与过程中的代码相同的文件夹,我仍然会收到错误消息。如果我在此过程中的代码中设置了一些其他环境变量,我会 not 得到错误。

更新:
如果我在用户级别设置 TMP 环境变量,我看不到错误:

Environment.SetEnvironmentVariable("TMP", "<sibling to Jet database>", EnvironmentVariableTarget.User);  

不幸的是,这对我不起作用,因为我只想在进程范围内更改 TMP 环境变量,而不影响机器上的其他进程。

如果 TMP 环境变量设置为不存在的文件夹,您将收到此错误。