Windows 10 Build 17134(2018年4月)已开始影响用户。
软件:
失败并显示错误:
[DBNETLIB] [ConnectionOpen(Connect())。] SQL Server不存在或访问被拒绝
如果从本地PC运行该软件,它可以正常工作。
我尝试过使用ADO COM对象:
String connectionString = "Provider=sqloledb;Data Source=screwdriver;Integrated Security=SSPI;";
Connection cn = CreateComObject("ADODB.Connection") AS Connection;
cn.Open(ConnectionString, "", "", 0);
[DBNETLIB] [ConnectionOpen(Connect())。] SQL Server不存在或访问被拒绝
如同没人知道的那样,ADO是一个友好的包装器,它围绕着过度设计的OLE DB API:
String connectionString = "Provider=sqloledb;Data Source=screwdriver;Integrated Security=SSPI;";
IDataInitialize dataInit = CreateComObject(CLSID_MSDAInitialize) as IDataInitialize;
IDBInitialize provider;
dataInit.GetDataSource(nil, CLSCTX_INPROC_SERVER, ConnectionString, IDBInitializeSC, out provider);
provider.Initialize; //Actually opens the connection to the database
[DBNETLIB] [ConnectionOpen(Connect())。] SQL Server不存在或访问被拒绝
由于我使用Delphi,我认为使用Delphi自己的ADODB对象包装器来包含CMRE是没用的:
program W10OleDbTest;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
ComObj,
ADOdb,
ADOInt,
ActiveX,
WinApi.OleDb;
var
cs: string;
conn: TADOConnection;
begin
conn := TADOConnection.Create(nil);
conn.ConnectionString := 'Provider=sqloledb;Data Source=screwdriver;Integrated Security=SSPI;';
WriteLn('Opening connection to database using TADOConnection...');
try
conn.Open;
WriteLn('Successfully connected to database using TADOConnection');
except
on E:Exception do
WriteLn('Exception connecting to database using TADOConnection: '+E.Message);
end;
Writeln('Press enter to close.');
ReadLn;
end.
什么是Windows 10,它正在破坏应用程序 - 我该怎么告诉它停止它?
查看release notes from Build 17134,没有任何相关的变化;所以我认为这是一个错误。
这似乎是一个非预期的安全功能(即我无法禁用的功能),如果它们是从SMB 1(对SMB 2或SMB 3)共享启动的,则阻止应用程序打开网络连接:
| SMB Version | Result | Example of product |
|-------------|-----------|------------------------|
| 1.5 | Fails | Windows 2000 |
| 1.5 | Fails | Synology NAS |
| 2.0 | Works | Windows Server 2008 |
| 2.1 | Works | Windows Server 2008 R2 |
显然,在更新Windows后,正确编写的应用程序失败并不合适。
您可以通过从Powerhell命令提示符运行来获取正在使用的SMB版本:
> Get-SmbConnection
ServerName ShareName UserName Credential Dialect NumOpens
---------- --------- -------- ---------- ------- --------
screwdriver Fizbang SOVERFLOW\ian SOVERFLOW\ian 2.0.2 6
hydrogen Contoso SOVERFLOW\ian SOVERFLOW\ian 1.5 6
答案 0 :(得分:1)
Windows Defender存在问题,预计将在6月(2018年)晚些时候进行修复。
如果从SMBv1共享运行应用程序,并且安装了Windows Defender,则不允许该应用程序打开套接字连接。
Microsoft已经承认这是一个"热点问题" :
- 症状:运行Windows 10版本1803的某些用户可能会收到错误"提供了无效参数"使用SMBv1协议访问文件或从共享文件夹运行程序时。
- 解决方法:在SMB服务器和SMB客户端上启用SMBv2或SMBv3,如KB2696547中所述。
微软正在制定一项将于6月晚些时候推出的决议。
您还可以通过安装其他防病毒产品来解决此问题。如果您安装了另一个防病毒产品,Windows Defender将自行禁用,您可以运行您的应用程序。
注意:禁用Windows Defender是不够的,因为它实际上并未禁用Windows Defender。在Windows Defender实际禁用自身之前,您必须安装另一个AV。
Microsoft已在OS Build 17134.137中发布了修复程序:
June 26, 2018—KB4284848 (OS Build 17134.137) (archive)
- 解决了使用SMBv1协议访问文件或从共享文件夹运行程序时某些用户可能收到错误的问题。错误是"提供了无效参数"。
已安装KB4284848,重新启动并确认已修复它。