J'ai deux fichiers exe dans le même dossier, je peux exécuter exe2 à partir d'un bouton dans exe1. Aujourd'hui, j'observais un client sur une session distante (services terminaux) et exe2 n'a pas réussi à exécuter l'erreur "Fichier non trouvé", mais exe1 était dans le même répertoire lorsque nous avons vérifié. Dois-je donc utiliser AppDomain.CurrentDomain.BaseDirectory ou System.Environment.CurrentDirectory ?
Merci
Si vous souhaitez rechercher des fichiers dans le même répertoire que votre application, AppDomain.CurrentDomain.BaseDirectory
est le bon choix.
Environment.CurrentDirectory
est une valeur qui peut et va changer au cours de l'exécution de votre application. Par exemple, en utilisant les paramètres par défaut, OpenFileDialog dans WinForms changera cette valeur dans le répertoire dans lequel le fichier a été sélectionné.
AppDomain.CurrentDomain.BaseDirectory renvoie le répertoire à partir duquel le domaine d'application actuel a été chargé. System.Environment.CurrentDirectory renvoie le répertoire système actuel. Dans votre cas, AppDomain.CurrentDomain.BaseDirectory est la meilleure solution.
Tu devrais utiliser AppDomain.CurrentDomain.BaseDirectory
.
Par exemple, dans une application de services Windows:
System.Environment.CurrentDirectory
renverra C:\Windows\system32
Tandis que
AppDomain.CurrentDomain.BaseDirectory
renverra [emplacement Application.exe]
Un autre facteur important à noter est que AppDomain.CurrentDomain.BaseDirectory
est une propriété en lecture seule tandis que le Environment.CurrentDirectory
peut être autre chose si nécessaire:
// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
Si je comprends bien, vous devez utiliser BaseDirectory
. CurrentDirectory
pourrait changer au cours de l'exécution du programme.
Dans les projets de test Visual studio 2010, si vous activez l'option de déploiement de Modifier les paramètres de test, AppDomain.CurrentDomain.BaseDirectory pointe vers le dossier TestResults\Out (pas bin\debug). Cependant, le paramètre par défaut pointe vers le dossier bin\debug.
Ici, j'ai trouvé une réponse convaincante.
Pourquoi AppDomain.CurrentDomain.BaseDirectory ne contient pas "bin" dans l'application asp.net?
J'utilise habituellement quelque chose comme:
string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
AppPath = AppPath.Replace("file:\\", "");
J'ai également vécu ces quelques jours, car j'utilisais
Environment.CurrentDirectory
car cela me posait un problème sur le serveur de production mais fonctionnait bien avec mon serveur local,
J'ai donc essayé avec
System.AppDomain.CurrentDomain.BaseDirectory;
Et cela a fonctionné pour moi dans l'environnement.
Donc, comme tous l'ont dit, nous devrions toujours
System.AppDomain.CurrentDomain.BaseDirectory;
car il vérifie le répertoire du domaine actuel pour le chemin d'accès.
jetez un oeil pour plus d'informations
Impossible de trouver une partie de l'erreur de chemin sur le serveur