4 votes

Pourquoi ne pouvons-nous pas "Exécuter en tant qu'administrateur" un fichier batch avec @ dans le chemin?

Nous venons de découvrir cette bizarrerie. Facile à éviter mais je suis curieux de savoir si les experts ici savent ce qui se passe.

Il semble que si vous essayez d'utiliser le clic droit "Exécuter en tant qu'administrateur" sur un fichier batch qui contient un espace et un symbole @ dans le chemin, il échouera à se lancer. Il fonctionnera correctement dans un contexte normal, ou dans une invite de commande que vous avez précédemment élevée, mais cet ensemble spécifique de circonstances provoque un échec sans cérémonie.

J'ai fait des recherches en ligne et la seule autre référence que j'ai trouvée était un message où un utilisateur nommé CapnM avait un problème similaire et avait découvert le même problème - en 2015

La fonction clic droit, Exécuter en tant qu'administrateur dans l'Explorateur de fichiers échoue si le chemin vers la cible contient à la fois un arobase (@) et un espace.

Par exemple, ces chemins fonctionnent :

D:\foo\bar\foobar\  
D:\foo\bar\foo bar\  
D:\@foo\bar\foobar\   
D:\@foo\bar@\foobar\

Mais ceux-ci empêchent la cible (fichier batch) de s'exécuter :

D:\@foo\bar\foo bar\  
D:\foo\bar\@foo bar\

S'agit-il simplement d'un bug qui n'a pas été corrigé depuis plus de 4 ans ?

4voto

harrymc Points 394411

Le code Windows qui dysfonctionne ici date probablement des premiers jours de DOS. C'est un vrai bazar pour gérer les caractères spéciaux.

Si vous souhaitez un autre exemple, créez un fichier nommé D:\foo\file(.bat et essayez de l'exécuter en utilisant CMD, sans nécessiter de permissions d'administrateur. Voici ce qui se passe :

entrer la description de l'image ici

Dans l'exemple ci-dessus, dans la commande CMD, les parenthèses délimitent la commande, il est donc comme si vous exécutez le programme C:\foo\file avec (.bat comme premier argument.

Vous pouvez voir à partir d'ici que le code CMD ancien a été écrit lorsque les noms de fichiers étaient beaucoup plus simples et avant que les caractères non alphanumériques ne soient autorisés.

Votre problème avec "Exécuter en tant qu'administrateur" se heurte probablement au même code ancien. La commande utilisée pour runas est définie dans le registre à la clé HKEY_CLASSES_ROOT\batfile\shell\runas\command, et contient :

%SystemRoot%\System32\cmd.exe /C "%1" %*

L'exécution de "Exécuter en tant qu'administrateur" utilise ensuite CMD pour exécuter la commande, et nous savons qu'il ne gère pas très bien les caractères spéciaux. Le code impliqué n'a jamais été publié par Microsoft, donc nous ne pouvons pas commenter à quel point il est mal écrit.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X