2010-07-30 14 views
5

Je veux déterminer le chemin absolu des fichiers utilisés par un processus connu en lisant la ligne de commande. Actuellement, le processus est démarré avec des chemins relatifs dans la ligne de commande qui pointent vers divers fichiers tels que les fichiers de configuration. Le problème est que si les chemins ne sont pas relatifs au dossier contenant l'exécutable, je n'ai aucun moyen de convertir les chemins relatifs fournis à la ligne de commande, bien je ne peux pas être sûr à 100%.C# Obtenir le répertoire de travail d'un autre processus

Par exemple deux fichiers batch:

LOT 1 CD c: \ test \ bin test.exe .. \ config \ config.ini

LOT 2 CD c: \ test bin \ test.exe config \ config.ini

Pour le fichier de commandes 1, la ligne de commande que j'obtiens est "c: \ test \ bin \ test.exe .. \ config \ config.ini" et pour le fichier de commandes deux, je obtenir "c: \ test \ bin \ test.exe config \ config.ini". Ainsi, voyez ceci je ne peux pas résoudre les chemins.

Quoi qu'il en soit pour les démarreurs, j'ai obtenu la ligne de commande à partir d'une requête WMI en utilisant ManagementObjectSearcher. Maintenant, je dois obtenir le répertoire de travail à partir duquel le processus a été démarré pour résoudre les chemins passés sur la ligne de commande, mais comment?

EDIT: J'ai oublié un détail clé. Je veux obtenir le répertoire de travail d'un autre processus. Fondamentalement, mon programme principal rassemble des informations d'un autre programme. Je suis capable de déterminer l'ID du processus car je connais le nom de l'exécutable. Je peux aussi déterminer la ligne de commande. Je dois maintenant trouver le répertoire de travail ou le répertoire courant dans lequel l'exécutable a été démarré afin que je puisse résoudre les chemins relatifs de la ligne de commande. J'espère que j'ai clarifié la question.

+1

Je pense que le titre de la question est pas tout à fait ce que vous demandez. "Get process working directory" est une question du répertoire de travail, qui peut vraisemblablement changer pendant l'exécution, mais la question elle-même semble demander le répertoire dans lequel l'exécutable a été démarré, qui peut être très différent exécution du processus). Réponse @ chris166 adresse le titre de votre question, mais ma réponse aborde la question elle-même, à mon humble avis. Peut-être pouvez-vous clarifier la confusion? – Cyberherbalist

Répondre

7

Je pense que Environment.CurrentDirectory devrait vous donner le répertoire où l'exécutable a été lancé. Il est seulement fiable au début du processus, car il peut changer plus tard.

Ou peut-être d'essayer Process.GetCurrentProcess().StartInfo.WorkingDirectory. Je ne l'ai pas essayé moi-même, je l'ai juste regardé dessus MSDN

+0

J'ai essayé tout cela dans une application de console, et Environment.CurrentDirectory est sorti avec le répertoire dans lequel l'application a démarré, comme vous le pensiez. Mais Process.GetCurrentProcess(). StartInfo.WorkingDirectory est sorti comme une chaîne vide. Ce qui m'a surpris - je pensais que ça aurait été pareil. Un peu plus de tests ont montré que si j'ai créé un raccourci vers l'exécutable, puis modifié la propriété "Démarrer dans" du raccourci vers quelque chose (comme "C: \"), alors c'est ce qui était alors dans le StartInfo.WorkingDirectory. – Cyberherbalist

1

Avez-vous essayé Application.ExecutablePath?

Sinon, il existe de nombreux chemins qui peuvent être extraient des Application