J'exécute des applications Winforms .net 3.5 auto-écrites à partir d'un dossier partagé dans Windows 10.
Tout fonctionnait correctement, mais après la dernière grande mise à jour (1803), l'application ne démarre plus.
Il semble que le programme se bloque au moment où il essaie d'ouvrir un socket. Le premier problème était lors de l'accès à la base de données, l'exception suivante était générée:
2018-05-03 14:36:32,314 [1] ERROR NHibernate.Transaction.AdoTransaction [(null)] - Begin transaction failed
MySql.Data.MySqlClient.MySqlException: Unable to connect to any of the specified MySQL hosts. ---> System.Net.Sockets.SocketException: invalid argument
at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
at MySql.Data.Common.MyNetworkStream.CreateSocketStream(MySqlConnectionStringBuilder settings, IPAddress ip, Boolean unix)
at MySql.Data.Common.MyNetworkStream.CreateStream(MySqlConnectionStringBuilder settings, Boolean unix)
at MySql.Data.Common.StreamCreator.GetStream(MySqlConnectionStringBuilder settings)
at MySql.Data.MySqlClient.NativeDriver.Open()
J'ai essayé de contourner ce problème, mais même accéder à un serveur SSH ne fonctionnait pas au démarrage du programme à partir du partage réseau:
2018-05-03 14:30:30,654 [1] ERROR WinForms.SpringApplication [(null)] - Main Handler
Tamir.SharpSsh.jsch.JSchException: System.Net.Sockets.SocketException: invalid argument
at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
at Tamir.SharpSsh.Java.net.Socket..ctor(String Host, Int32 port)
at Tamir.SharpSsh.jsch.Util.createSocket(String Host, Int32 port, Int32 timeout)
bei Tamir.SharpSsh.jsch.Session.connect(Int32 connectTimeout)
bei Tamir.SharpSsh.SshBase.ConnectSession(Int32 tcpPort)
bei Tamir.SharpSsh.SshBase.Connect(Int32 tcpPort)
bei Tamir.SharpSsh.SshBase.Connect()
Lorsque je copie le répertoire localement, le programme fonctionne correctement.
Des idées pour expliquer pourquoi Windows semble bloquer l'accès aux sockets lorsque je lance ce programme à partir d'un partage réseau?
Je connais la confiance en un code .net, qui peut donc être exécuté à partir d'un partage réseau, mais j'ai renouvelé la confiance totale et il se bloque toujours (et normalement, il se bloque beaucoup plus tôt si je ne faisais pas une confiance totale).
Nous avons quelques informations sur ce problème:
Windows 10 update 1803 n'ouvre pas de connexion réseau sur fichiers exécutables sur partage SMBv1 (en tant que Windows Server 2003)
Vous pouvez essayer de déplacer votre programme sur un serveur compatible SMBv2 ou SMBv3 pour le vérifier.
Microsoft a résolu ce problème le 26 juin 2018 dans la 2018-06, mise à jour cumulative pour Windows 10 version 1803 pour systèmes x64 (KB4284848) (OS version 17134.137).
L'un des correctifs est pertinent:
Résout le problème suivant: certains utilisateurs peuvent recevoir une erreur lors de l'accès à des fichiers ou de l'exécution de programmes à partir d'un dossier partagé à l'aide du protocole SMBv1. L'erreur est "Un argument invalide a été fourni".
Ceci et d'autres solutions de contournement sont discutés dans:
https://blog.mertech.com/windows-10-version-1803-breaks-some-shared-folder-applications
Je teste ceci - si le serveur n'autorise que SMBv1 (max), aucune connexion ne peut être créée à partir d'exécutables à partir de partagés. Si SMB est v2, tout fonctionne correctement.