まず第一に:この投稿で読むすべてが起こりますonlyif Windows 10 April 2018更新プログラムがインストールされています。 インストール前およびアンインストール後後に問題はありません。
Windows 10 1803更新プログラムをインストールした後、ネットワークマップドライブまたはUNCパスから実行しているすべてのmy VBプログラム(VB6、.NETおよびWPF)はSQLサーバーに接続できません。同じ実行可能ファイルであれば問題ありませんローカルドライブから配置および実行されます(同じネットワーク内の2台のPCでテスト済み):
これはエラーです(この問題を解決するために重要でない場合があります)。
SQL Serverへの接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認してください。 (プロバイダー:SQLネットワークインターフェイス、エラー:26-指定されたサーバー/インスタンスの検索エラー)。
問題を再現するためのシンプルなVB.NETコード(button_clickイベントにボタンがあるシンプルなフォームにコードを配置し、SQLサーバーに接続する値を設定し、コンパイルし、exeファイルをネットワークパスに保存して実行します):
Dim myConnectionString As String
Dim mySqlConnectionStringBuilder As New SqlConnectionStringBuilder()
mySqlConnectionStringBuilder.DataSource = myServer
mySqlConnectionStringBuilder.InitialCatalog = myDatabase
mySqlConnectionStringBuilder.UserID = myUtente
mySqlConnectionStringBuilder.Password = myPassword
myConnectionString = mySqlConnectionStringBuilder.ConnectionString
Dim mySqlConnection As New SqlConnection(myConnectionString)
mySqlConnection.Open() <- error
例外:
System.Data.SqlClient.SqlException (0x80131904): Si è verificato un errore di rete o specifico Dell'istanza mentre si cercava di stabilire una connessione con SQL Server. Il server non è stato trovato o non è accessibile. Verificare che il nome Dell'istanza sia corretto e che SQL Server sia configurato in modo da consentire connessioni remote. (provider: SQL Network Interfaces, error: 26 - Errore nell'individuazione del server/Dell'istanza specificata)
in System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager)
in System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
in System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
in System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
in System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
in System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
in System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
in System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
in System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
in System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
in System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
in System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
in System.Data.SqlClient.SqlConnection.Open()
in RiepilogoOreTimer.RiepilogoOreTimerWindow.ConnessioneOK()
ClientConnectionId:00000000-0000-0000-0000-000000000000
Error Number:-1,State:0,Class:20
何か案は?
Update:2018年4月のアップデートをアンインストールすると、問題はなくなり、ネットワークドライブで実行してもプログラムは正常に動作しますが、これはできませんソリューション...
2018年8月5日更新:2018年4月の更新により、いくつかの セキュリティの変更 :
Windows 10バージョン1803は、追加の保護を提供します。
- 新しい攻撃対象領域削減ルール
- フォルダーアクセスの制御により、ディスクセクターをブロックできるようになりました
それが問題の原因になりますか?私はセキュリティマネージャーではないので、これが私の問題を引き起こす可能性があるかどうかは言えません
2018年5月5日更新:this post:
Windows 10アップデート1803は、SMBv1共有上の実行可能ファイルのネットワーク接続を開きません(Windows Server 2003として)
しかし、私はSMBv1が何であるか知りません...誰かが私を助けることができますか?
最後に問題が見つかりました。共有フォルダーのあるサーバーでは、SMBv2が無効になっているため(理由はわかりません)、SMBv1のみがアクティブになります。同じネットワーク内の同じクライアントから実行された同じプログラムが、SMBv2が有効になっているサーバー上で正常に動作します。
したがって、問題はSMBv1共有に関するもので、Windows 10 1803から非推奨になりました
このブログは、これに対する解決策を提供します。 「M.Hermann」からの答えを具体的に見てください: Windows 10 1803は実行されませんODBCネットワークからのSQL接続アプリケーション
以下のリンクは、SMBv1が無効になっている理由を説明しているようです: SMBv1は、Windows 10 Fall Creators UpdateおよびWindows Serverバージョン1709以降のバージョンではデフォルトでインストールされません
SMBv1は1709年以降無効にされているため、なぜこれが1803年以降にのみ問題となるのかはわかりません。
「Rad Studio 10.2」で作成したアプリケーションにも同じ問題があります
私は解決策を見つけました、パラメータ"Network Library = dbmssocn"
を削除して接続文字列を変更します
私はこれを変更します:
Provider=SQLOLEDB.1;Password=MyPassword;Persist Security Info=True;User ID=MyUser;Initial Catalog=MyDb;Data Source=MyServer;Network Library=dbmssocn;
これに:
Provider=SQLOLEDB.1;Password=MyPassword;Persist Security Info=True;User ID=MyUser;Initial Catalog=MyDb;Data Source=MyServer
これですべてうまくいきました!