2009-09-17 7 views
-1

Pourquoi le répertoire racine d'un processus, démarré par un gestionnaire de processus Windows, change-t-il dans le répertoire où se trouve le pm? Utilisation du code du gestionnaire de processus msdn pour créer un service pm pour exécuter quelques exes.
Les exes enregistrent les fichiers journaux dans la racine par rapport à leur emplacement.
Lorsqu'elles sont démarrées par le gestionnaire de processus, elles sont enregistrées dans le répertoire du gestionnaire de processus?Windows processus de gestion

Tout conseil est apprécié, merci.

+1

Qu'est-ce qu'un « gestionnaire de processus » ? Votre question est déjà le résultat n ° 6 sur Google, et les entrées les plus élevées concernent les processus métier, pas les processus OS. – MSalters

Répondre

1

Les lancements devraient être sur le superutilisateur !!! Le bouclier

Le PM est un processus lui-même démarré à partir de l'endroit où pointe le raccourci PM, de sorte que WD sera l'emplacement de l'exécutable. Si vous démarrez un autre processus à partir de cela, il va fork (errr, windows equivelent) un autre processus avec le même WD. Si vous y réfléchissez, que feriez-vous d'autre?

+0

attendez-vous à être plus intelligent ........ est-ce beaucoup à demander ..haha –

+0

Donc, si vous deviez avoir ce processus de fourche un autre processus, vous voudriez qu'il change le WD à l'emplacement de la code exécutable en premier? Ce serait un code "fluff" supplémentaire pour le PM :). –

+1

@Tommy. Ce n'est pas plus intelligent. Quand je démarre un programme, je m'attends à ce que le répertoire de travail soit le répertoire où je suis, donc le programme peut travailler sur les fichiers sur lesquels je travaille. Je ne veux pas copier mes fichiers dans le dossier de l'application juste pour pouvoir les lire. Il est donc plus intelligent de laisser le répertoire de travail dans l'application plutôt que dans l'appelant/le démarreur de l'application. Votre application doit juste être plus intelligente :-) –

1

Cela ressemble à un problème de répertoire de travail. Par défaut, le répertoire de travail d'une application n'est pas celui où l'application est lancée, mais le répertoire dans lequel elle a été lancée. Vérifiez s'il existe un moyen de définir le répertoire de travail dans lequel le processus doit être lancé. Je sais que c'est possible dans .Net mais si vous n'utilisez pas .Net, je ne sais pas comment vous le feriez.

+0

Qu'est-ce que "le répertoire dans lequel l'application est lancée"? Vouliez-vous dire "le répertoire où se trouve l'application"? – MSalters

1

Pour être honnête, je ne sais pas quel est le gestionnaire de processus MSDN, mais je sais que chaque fois que je crée des processus, j'appelle CreateProcess, cette fonction permet de décider dans quel répertoire le processus est créé. Par exemple, je vais créer un processus CMD qui se trouve dans le répertoire C: \.

STARTUPINFO si; 
PROCESS_INFORMATION pi; 

ZeroMemory(&si, sizeof(si)); 
si.cb = sizeof(si); 
ZeroMemory(&pi, sizeof(pi)); 

CreateProcess(_T("cmd.exe"), // Note, because this is windows, it will automatically find cmd.exe because it's in one of its automatic search directories, so no need to put c:/windodws/system32/cmd.exe 
NULL, 
NULL, 
NULL, 
FALSE, 
0, 
NULL, 
_T("c:\\"), 
&si, 
&pi); 

poignées pour le processus et le fil principal sont conservés dans l'objet PROCESS_INFORMATION et doit être fermé à l'aide CloseHandle après avoir terminé avec eux.

Pour plus d'informations sur tous ces paramètres (même si pour la plupart que vous utiliserez CreateProcess presque exactement comme je viens) est ici la page MSDN:

http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx

Questions connexes