Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Application.StartupPath() vs Directory.GetCurrentDirectory() [ Système / Autre ] (scoubidou944)

mardi 30 septembre 2008 à 19:41:05 | Application.StartupPath() vs Directory.GetCurrentDirectory()

scoubidou944

Glop glop,

avant qu'il ne me reste plus un cheveu sur le crâne je viens demander un peu d'aide.

Ces 2 fonctions ne retournent pas la même chose.
Application.StartupPath()
Directory.GetCurrentDirectory()

Sur mon poste en Vista le premier  me donne le 'path de mon projet\bin\Debug'.
L'autre donne 'path de mon projet' (normal puisque j'ai changé au niveau du projet le lieu d'execution)
Ce changement est volontaire car j'ai un dossier \Apps en sous dossier de mon projet et je veux donc qu'il soit accessible en Debug et Release.

Sur une VM avec InnoSetup, le fichier doit se coller dans le HKLM\Run ce qu'il fait bien :
C:\Program Files\Company\MySoft\SupportTray.exe

Or au lancement du soft sur la VM, pour le GetCurrentDirectory il me sort un path exotique (sous 2K Pro) :
c:\Documents and Settings\Administrateur
donc :
c:\Documents and Settings\Administrateur\.\Apps\Toto.exe
ne se lance pas.

Et si j'utilise Application.StartupPath, c'est sous VisualStudio que ca ne marche vu que le path ne contient pas le dossier Apps.

HELPPPPPPP



----------------------------
C++ forever
C# amateur

mercredi 1 octobre 2008 à 02:00:00 | Re : Application.StartupPath() vs Directory.GetCurrentDirectory()

scoubidou944

en fait, il semblerait que ce soit :
Directory.GetCurrentDirectory()
qui renvoie :
'C:\Documents and Settings\Administrateur'

au lieu de retourner le path ou se trouve l'exe.

mercredi 1 octobre 2008 à 06:47:24 | Re : Application.StartupPath() vs Directory.GetCurrentDirectory()

SharpMao

Membre Club
Hello,

En effet, il ne faut pas confondre les deux.
Application.StartupPath retourne bel et bien le chemin de l'exe.

Directory.GetCurrentDirectory retourne un répertoire de travail. Ce dernier peut être changé dans le code avec la propriété Environment.CurrentDirectory. Je crois même, mais sans en être certain, qu'un OpenFileDialog (ou un des autres dialogues de cette catégorie) modifie cette variable en fonction du fichier sélectionné.

Ce que tu peux faire, c'est un depuis VS, regarder les propriété des fichiers contenus dans ton dossier Apps. Tu mets "Build Action" à Content, et "Copy to output directory" à "Copy always".

De cette manière, lors de la compilation, VS va créer un dossier Apps dans bin/debug ou dans bin/release, avec les fichiers dont tu auras changé les propriétés indiqués.

Une autre possibilité est de les inclure en tant que resources.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)

mercredi 1 octobre 2008 à 09:30:13 | Re : Application.StartupPath() vs Directory.GetCurrentDirectory()

scoubidou944

Ce serait une solution en effet même si ca fait dupliquer les données.

Mais ce que je voudrais comprendre c'est pourquoi je me retrouver sous 2KPro avec ce path (c:\Documents and Settings\Administrateur) lors de l'appel à GetCurrentDirectory (). alors que la clé dans le HKLM\run indique bien le chemin complet de l'exe.

----------------------------
C++ forever
C# amateur

mercredi 1 octobre 2008 à 10:49:24 | Re : Application.StartupPath() vs Directory.GetCurrentDirectory()

scoubidou944

je viens de faire le test avec le code suivant :
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;
using System.Diagnostics;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string strMessage;
            strMessage = string.Format("Process.GetCurrentProcess().MainModule.FileName      : '{0}'", Process.GetCurrentProcess().MainModule.FileName);
            DbgWriteLine(strMessage);
            strMessage = string.Format("System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)   : '{0}'", System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));
            DbgWriteLine(strMessage);
            strMessage = string.Format("Directory.GetCurrentDirectory: '{0}'", Directory.GetCurrentDirectory());
            DbgWriteLine(strMessage);
        }

        static void DbgWriteLine(string message)
        {
            StreamWriter output = new StreamWriter("MyLog.txt", true, Encoding.Default);

            output.WriteLine(message);
            Console.WriteLine(message);

            output.Close();
        }
    }
}


Avec le fichier de registre suivant :
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"TST"="\"c:\\remote\\ConsoleTest.exe\""

Et en plaçant l'exe généré dans
C:\remote

Il me colle mon fichier de log Mylog.txt dans :
C:\Documents and Settings\Utilisateur

(Idem sur XP Pro en machine virtuelle avec toutes les MaJ Windows update)


mercredi 1 octobre 2008 à 12:10:42 | Re : Application.StartupPath() vs Directory.GetCurrentDirectory()

scoubidou944

Je viens de faire le test en Win32 :

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        internal static extern uint GetCurrentDirectory(uint nBufferLength,
        [MarshalAs(UnmanagedType.LPTStr)]StringBuilder path);

[...] Main ()

StringBuilder sb = new StringBuilder(256);
GetCurrentDirectory(256, sb);
string Name = sb.ToString();

strMessage = string.Format("Win32.GetCurrentDirectory: '{0}'", Name);
DbgWriteLine(strMessage);


Même résultat.

mercredi 1 octobre 2008 à 12:18:23 | Re : Application.StartupPath() vs Directory.GetCurrentDirectory()

SharpMao

Membre Club
Oui, et c'est normal,

CurrentDirectory n'a rien a voir avec le chemin de l'application, de windows, ou d'une quelconque entrée du registre.
Il ne faut pas s'y fier pour retrouver des informations nécessaires à ton programme.
Même la doc microsoft le dis : "Le répertoire actif est distinct du répertoire d'origine qui est celui à partir duquel le processus a été démarré."
Le répertoire actif étant ce qui est retourné par cette méthode.
Un autre moyen, si tu ne veux pas copier les fichier dans la sortie, c'est d'ajouter un paramètre dans un fichier de config.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)

mercredi 1 octobre 2008 à 13:09:46 | Re : Application.StartupPath() vs Directory.GetCurrentDirectory()

scoubidou944

oui je pense que je ne vais pas y couper.
n'empeche que c'est super bizarre que le CurrentDirectory soit collé à cet emplacement.

----------------------------
C++ forever
C# amateur



Cette discussion est classé dans : application, projet, path, getcurrentdirectory, startuppath


Répondre à ce message

Sujets en rapport avec ce message

Path de la dll [ par gbourgeois0019 ] Voila.. J'ai une dll dans les references de mon projet, lorsque je compile elle se retrouve dans le dossier ..MonProjet/bin/Release/MaDll.dll ... Lors load projet [ par superismali ] Bonjour a tous,J'ai développé une petite application et j'ai enregistrer tous mes parametres dans un fichier xml. J'ai affecté a ce fichier de projet Erreur de Path [ par Jackboy ] Bonjour !J'ai un problème avec les pathMise en situation, j'ai fais un install et je recupere le path de mon application installer chez le client. Je appeller une forme d'un projet dans un projet [ par francesdereve ] J'ai une application qui contient plusieurs formes par la suite j'ai une autre application qui contient d'autres choses.je veux a partir du premier pr Projet d'installation utilisant DirectX [ par aquanovax ] Bonjours, j'ai une application qui utilise DirectX et un projet d'installation. Le projet d'installation à ajouté les dépendances (DirectX) automatiq Dll Path [ par edokt ] Bonjour a tous Voila la question que j'ai J'ai creé une Dll a partir C# - Projet - Bibliothèque de classes Dans la dll j'utilise un fichier xml que Projet Setup [ par Choumi1980 ] Bonjour tous le monde,je suis en train de créer un setup pour mon application. Lors du Setup je demande à l'utilisateur de m'indiquer où est-ce qu'il Projet de déploiement d'une application en c# sur .NET [ par guillrich ] J'ai créé un projet de déploiement d'une application Windows et j'aimerais savoir si quelqu'un sait comment choisir une langue d'installation des inte Connaitre le path de l'application [ par lucasd ] Salut tout le monde! Bon voilà, dans mon programme j'aimerais créer des fichiers de log en html dans un repertoire qui serais situé dans le même repe Projet: application scan Ip [ par krisloren ] Dans le cadre d un stag il m aété confié de realiser une application ki scanne un reseau et donne toutes les adresses Ip et MAC des machines connectée


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.