2

Fond:Comment pouvons-nous écraser les fichiers EXE pendant que les utilisateurs les exécutent?

Nos sociétés internes exécutent nos programmes .Net sur des serveurs 10-20 Windows Terminal Server. Les executables sont tous stockés sur un serveur de fichiers central exécutant Windows 2003. Certains des serveurs de terminaux sont en cours d'exécution de Windows 2003 et certains sont en cours d'exécution 2008.

Questions:

Lorsque nous avons une nouvelle version d'un de nos programmes, nous avons renommé les fichiers qui pourraient être verrouillés (EXE, DLL, ect.), puis nous copions la version la plus récente du fichier à l'emplacement approprié. Cela a fonctionné parfaitement jusqu'à ce que nous commencions à introduire des serveurs de terminaux Windows 2008. Maintenant, si un utilisateur sur l'un des WTS 2008 exécute le programme, alors les fichiers sont verrouillés de telle sorte qu'ils ne peuvent même pas être renommés.

Questions

  • Est-il possible de renommer le fichier verrouillé?

  • Y at-il un moyen de désactiver cette nouvelle fonctionnalité de 2008 qui verrouille les fichiers EXE pendant leur exécution?

  • Existe-t-il une meilleure solution?

Répondre

3

Notre problème s'est avéré être à cause d'une nouvelle fonctionnalité dans le partage de fichiers Windows appelée "Opportunistic Locking". Il est actuellement impossible de désactiver cette fonctionnalité lorsque les deux serveurs sont 2008.

Nous avons actuellement un dossier ouvert avec Microsoft à la recherche d'autres solutions et de faire un tour. Se pencher vers l'utilisation de DFS pour le moment.

+1

Microsoft a publié un [correctif] (http://support.microsoft.com/kb/2622136) pour Windows 7 et Windows 2008 R2 pour empêcher le verrouillage des fichiers utilisés dans les partages. Je ne suis pas sûr si cette mise à jour a été intégrée dans un Service Pack pour le moment. – Frankenstein

3

Pas vraiment. Si un fichier est verrouillé, il est verrouillé et, à moins que le processus qui le déverrouille ne le libère ou que la connexion au partage réseau de cet utilisateur ne soit déconnectée, vous ne pouvez pas faire grand-chose avec le fichier.

Vous devez passer au déploiement ClickOnce au lieu d'exécuter les exécutables à partir d'un partage réseau. Mis à part le problème de mise à jour que vous décrivez, l'exécution à partir du partage réseau a des implications sur la sécurité d'accès au code et a un impact sur la charge initiale de l'application.

+1

Renommer le fichier n'est pas toujours une opération avec le fichier contient, mais seulement avec le répertoire correspondant. Seulement si le fichier est ouvert pour un accès exclusif, le changement de nom n'est pas possible. – Oleg

+0

C'est exact. Cela semble également être le cas dans votre scénario. :-) –

+1

Nous avons déjà essayé ClickOnce sur nos services de terminal et, malheureusement, ClickOnce n'est pas très fiable dans un environnement de services Terminal Server. – jColeson

1

En général, vous ne devriez pas avoir de problème pour renommer le fichier verrouillé sur les serveurs Terminal Server Windows 2008 exactement comme sur toutes les versions précédentes de Windows NT en commençant par le premier Windows NT 3.1.

Vous avez probablement un problème avec le programme que vous utilisez pour renommer les fichiers. Vous pourriez le faire dans les anciens systèmes d'exploitation directement dans l'Explorateur, plus tard, pas plus. Mais il est possible de renommer les fichiers en CMD.EXE. Il suffit de démarrer cmd.exe et d'essayer la commande rename.

+0

Nous utilisons la commande Exec dans la définition de construction TFS pour exécuter la commande de renommage. Ma compréhension est que la commande Exec passe directement notre commande à cmd.exe. – jColeson

+0

Je ne sais pas quelle commande Exec ou quel programme Exec.exe vous utilisez. Démarrez juste 'cmd.exe' et tapez' renommer "\\ Server \ share \ Dir \ my.exe" Old.exe ". Vous pouvez le faire sur le réseau. – Oleg

+0

Nous avons un script dans notre serveur de fondation d'équipe qui automatise nos builds. Les tâches Exec en font partie. Malheureusement, le démarrage manuel de cmd.exe et l'appel au renommage ne fonctionnent pas non plus. Je suis d'accord avec la plupart des commentaires que * ça * devrait * marcher, mais ce n'est pas le cas. Peut-être que je devrais appeler le support de Microsoft. – jColeson