12
votes

Comment obtenir le nom de fichier de .exe

Duplicates possibles:

Obtenir le chemin de l'assemblée actuelle
C #: Comment faire Je reçois le chemin de l'assemblée que le code est dans?

Utilisation de VB 2008, comment puis-je obtenir le nom de fichier d'une exécution de l'intérieur elle-même?

edit : ceci est pour une application de console, donc application.executablePath ne fonctionnera pas.


6 commentaires

Cela a été posé à plusieurs reprises avant de tenter d'utiliser la recherche. Voici un que j'ai trouvé- Stackoverflow. com / questions / 864484 / ...


Aussi: Stackoverflow.com/questions/52797/... Ce n'est pas aussi simple que exécutablePath car certains assemblages sont chargés de clic-une fois


J'ai fait la recherche et n'ai rien trouvé. C'est évident maintenant, mais je cherchais .exe non assemblée. @Richardod essaie de ne pas être un imbécile.


HUER. Pas vraiment un duplicata exact. Je n'ai pas trouvé ceux parce que je cherchais .exe non assemblée.


En outre, pourquoi répondriez-vous à cette question puis de voter pour le fermer (Steven Sudit, Rowland Shaw)?


Pas un duplicata. Je pense qu'il ne trouve que le chemin et le nom de fichier uniquement, qui est system.io.getfilename (system.reflet.assembly.getexecutin gassembly.location)


4 Réponses :


20
votes

Il y a quelques façons:

System.Reflection.Assembly.GetExecutingAssembly().Location


3 commentaires

OK, mais l'application est dans System.Windows.Forms. Est-ce une application Winform?


Merci beaucoup d'avoir ajouté ma réponse.


Rruz, je pense que OPLOPANAX a un bon point sur l'utilisation de GetRentryAssembly au lieu de get contre-résolvement. De même, la basebase est un meilleur choix que l'emplacement, car il n'inclut pas également le chemin.



1
votes

Process.getCurrentProcess (). MainModule

éditer

Une autre manière peut être d'utiliser Environment.getCommandLineargs () [0], mais je préfère utiliser le processus.


4 commentaires

Steve doit être process.getCurrentProcess (). MainModule.filename


Ce n'est pas tout à fait correct: vous avez le choix entre obtenir le nom de fichier ou le modulename.


Modulename obtient le module principal du processus associé. pas le nom de fichier.


En fonction de ce dont vous avez besoin, cela peut être plus utile.



0
votes

Vous devez le trouver dans la propriété: application.execuTablePath


6 commentaires

Je ne t'ai pas répondu, mais vous remarquerez peut-être que Rruz a fourni la réponse avant de le faire.


Ah, mais j'avais inclus un lien vers la documentation, c'est pourquoi j'ai gardé ma réponse (et pourquoi il m'a battu quelques secondes)


Bien, je vais vous uppoter à la neutralité.


Et cela fait germement un autre vote aléatoire?


Très étrange. Il n'y a rien de mal avec votre réponse.


Je vais bien avec des upvotes moulés pour compenser les bowvotes. Cependant, je l'ai fait une fois et j'ai fait l'erreur de l'admettre dans les commentaires. Wow, ai-je pris un coup de fouet. Apparemment, cela était correct que j'ai suscité, mais cela énervé vraiment certaines personnes que j'ai publiquement admis que c'était pour compenser un bowvote. Certaines de ces personnes sont ensuite allées sur une sorcière, descendant presque toutes les réponses que j'ai jamais laissées.



4
votes

Ceci a été répondu à avant .

de n'importe où dans votre code, vous pourriez être dans un assemblage chargé par l'EXE originaire. Vous n'avez peut-être pas non plus de référence à l'application Singleton, alors que l'utilisation de la classe d'assemblage est votre meilleur pari.

La manière la plus sûre est assemblage.getenryassembly () < /a>.Location Obtient l'emplacement sur le système de fichiers où l'assemblage est actuellement. Si c'est ombre copiée puis ceci est l'emplacement de la copie de l'ombre. S'il s'agit de clic-une fois déployé, il s'agit d'un chemin fou d'un fichier dans le Sandbox Zone.

L'emplacement d'origine de l'assembly sera à Assemblage.getTentrySembly (). CodeBase


2 commentaires

Dans le cas du déploiement de clic-une fois, la méthode de processus rendra-t-elle un résultat utile?


Je ne suis pas totalement certain, mais je pense que la méthode de processus recevra le nom du processus de lanceur ClickOnce de la même manière que pour une application Web, elle obtiendrait le processus de travailleur de l'IIS.