来自 Windows 10 上网络共享的应用程序 运行 无法连接到 SQL 服务器
Application run from network share on Windows 10 cannot connect to SQL Server
Windows10 Build 17134(2018 年 4 月)已开始影响用户。
软件:
- 是 运行 来自网络共享 (例如 \\hydrogen\Contoso\Grobber.exe)
- 连接到 SQL 服务器数据库
- 使用 OLEDB
失败并出现错误:
[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied
如果软件是 运行 来自本地 PC 的,则它可以正常工作。
使用 ADO
我试过使用 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 does not exist or access denied
使用 OLE DB
没有人知道,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 does not exist or access denied
并使用 Delphi XE6 的 ADOdb 包装器
自从我使用 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,它正在破坏应用程序 - 我该如何告诉它停止它?
- 客户端电脑:Windows 10 Build 17134
- SQL 服务器: SQL 服务器 2005
- 网络共享:Windows Server 2003 R2
查看 release notes from Build 17134,没有与此类相关的更改;所以我认为这是一个错误。
奖金聊天
- 对可执行文件进行数字签名没有区别
- 通过 IP 地址(而不是名称)指定 SQL 服务器没有区别
- 运行以管理员身份安装应用程序没有区别
- 关闭 Domain、Public 和 Private 防火墙没有区别
- 关闭Windows Defender 没有区别
- 关闭Windows Defender 实时保护没有区别
SMB 版本 1
这似乎是一项意外的安全功能(即我无法禁用的功能),如果应用程序是从 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 命令提示符中获取 运行ning 使用的 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
红利阅读
- https://changewindows.org/build/redstone4/17134/pc
- Windows 10 Version 1803 Update Breaks Some Applications ()
- KB4284835:June 12, 2018—KB4284835 (OS Build 17134.112) ()
- Windows 10 Fall Creators Update and Synology NAS ()
- KB4034314:SMBv1 is not installed by default in Windows 10 Fall Creators Update and Windows Server, version 1709 and later versions ()
- Windows 10 1803 can’t run EXE files from a network shared folders ()
- [RS4:1803]Windows 10 1803 won't run ODBC SQL connected application from network ()
这是 Windows Defender 的一个问题,预计将在 6 月晚些时候(2018 年)修复。
如果应用程序 运行 来自 SMBv1 共享,安装了 Windows Defender,则不允许应用程序打开套接字连接。
Microsoft 已确认此 "hot issue":
- Symptom: Some users running Windows 10 version 1803 may receive an error "An invalid argument was supplied" when accessing files or running programs from a shared folder using the SMBv1 protocol.
- Workaround: Enable SMBv2 or SMBv3 on both the SMB server and the SMB client, as described in KB2696547.
Microsoft is working on a resolution that will be available later in June.
您也可以通过安装不同的防病毒产品来解决此问题。如果您安装其他防病毒产品,Windows Defender 将自行禁用,您可以 运行 您的应用程序。
注意:禁用Windows Defender 是不够的,因为它实际上并没有禁用Windows Defender。在 Windows Defender 实际禁用自身之前,您必须安装另一个 AV。
编辑 2018 年 6 月 28 日 - 修复
Microsoft 已在 OS Build 17134.137 中发布了修复程序:
June 26, 2018—KB4284848 (OS Build 17134.137) (archive)
- Addresses an issue where some users may receive an error when accessing files or running programs from a shared folder using the SMBv1 protocol. The error is "An invalid argument was supplied".
已安装 KB4284848,重新启动并确认已修复。
Windows10 Build 17134(2018 年 4 月)已开始影响用户。
软件:
- 是 运行 来自网络共享 (例如 \\hydrogen\Contoso\Grobber.exe)
- 连接到 SQL 服务器数据库
- 使用 OLEDB
失败并出现错误:
[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied
如果软件是 运行 来自本地 PC 的,则它可以正常工作。
使用 ADO
我试过使用 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 does not exist or access denied
使用 OLE DB
没有人知道,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 does not exist or access denied
并使用 Delphi XE6 的 ADOdb 包装器
自从我使用 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,它正在破坏应用程序 - 我该如何告诉它停止它?
- 客户端电脑:Windows 10 Build 17134
- SQL 服务器: SQL 服务器 2005
- 网络共享:Windows Server 2003 R2
查看 release notes from Build 17134,没有与此类相关的更改;所以我认为这是一个错误。
奖金聊天
- 对可执行文件进行数字签名没有区别
- 通过 IP 地址(而不是名称)指定 SQL 服务器没有区别
- 运行以管理员身份安装应用程序没有区别
- 关闭 Domain、Public 和 Private 防火墙没有区别
- 关闭Windows Defender 没有区别
- 关闭Windows Defender 实时保护没有区别
SMB 版本 1
这似乎是一项意外的安全功能(即我无法禁用的功能),如果应用程序是从 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 命令提示符中获取 运行ning 使用的 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
红利阅读
- https://changewindows.org/build/redstone4/17134/pc
- Windows 10 Version 1803 Update Breaks Some Applications ()
- KB4284835:June 12, 2018—KB4284835 (OS Build 17134.112) ()
- Windows 10 Fall Creators Update and Synology NAS ()
- KB4034314:SMBv1 is not installed by default in Windows 10 Fall Creators Update and Windows Server, version 1709 and later versions ()
- Windows 10 1803 can’t run EXE files from a network shared folders ()
- [RS4:1803]Windows 10 1803 won't run ODBC SQL connected application from network ()
这是 Windows Defender 的一个问题,预计将在 6 月晚些时候(2018 年)修复。
如果应用程序 运行 来自 SMBv1 共享,安装了 Windows Defender,则不允许应用程序打开套接字连接。
Microsoft 已确认此 "hot issue":
- Symptom: Some users running Windows 10 version 1803 may receive an error "An invalid argument was supplied" when accessing files or running programs from a shared folder using the SMBv1 protocol.
- Workaround: Enable SMBv2 or SMBv3 on both the SMB server and the SMB client, as described in KB2696547.
Microsoft is working on a resolution that will be available later in June.
您也可以通过安装不同的防病毒产品来解决此问题。如果您安装其他防病毒产品,Windows Defender 将自行禁用,您可以 运行 您的应用程序。
注意:禁用Windows Defender 是不够的,因为它实际上并没有禁用Windows Defender。在 Windows Defender 实际禁用自身之前,您必须安装另一个 AV。
编辑 2018 年 6 月 28 日 - 修复
Microsoft 已在 OS Build 17134.137 中发布了修复程序:
June 26, 2018—KB4284848 (OS Build 17134.137) (archive)
- Addresses an issue where some users may receive an error when accessing files or running programs from a shared folder using the SMBv1 protocol. The error is "An invalid argument was supplied".
已安装 KB4284848,重新启动并确认已修复。