2008-09-22 9 views
2

J'ai un exécutable Windows (whoami) qui se bloque de temps en temps. Il est appelé à partir d'un autre processus pour obtenir des détails sur l'utilisateur et le domaine en cours. Je voudrais savoir quels paramètres sont passés quand il échoue.Enveloppe un exécutable pour diagnostiquer ses invocations

Est-ce que quelqu'un sait d'un moyen approprié pour envelopper le processus et écrire ses arguments de ligne de commande pour se connecter tout en appelant le processus?

Dites la commande est utilisée comme ceci: « whoami.exe/all »

Je voudrais un script d'exister au lieu du whoami.exe (avec le même nom) qui rédigera cette invocation à log et ensuite passer l'appel au processus réel.

Répondre

1

A partir d'un fichier batch:

echo Parameters: %* >> logfile.txt 
whoami.exe %* 

Avec la mise en garde que vous pouvez avoir des problèmes si les paramètres contiennent des espaces (et vous avez passé le à échapper avec "), car l'analyseur de ligne de commande leur échappe et doit être rééchappé avant de passer à un autre exécutable

+0

Parfait, merci. – joejag

+0

Actaully, j'ai encore besoin de remplacer le whoami.exe avec ce lot. Y a-t-il un moyen d'y parvenir? – joejag

+0

Non, je ne pense pas que tu puisses faire ça. Un script comme celui-ci vous fera ce que vous voulez, mais ne peut pas avoir une extension .exe. –

1

Vous n'avez pas noté le langage de programmation. Ce n'est pas faisable à partir d'un fichier .bat si c'est ce que vous vouliez, mais vous pouvez le faire dans n'importe quel langage de programmation. Exemple en C:

int main(int argc, void **argv) 
{ 
    // dump contents of argv to some log file 
    int i=0; 
    for (i=0; i<argc; i++) 
     printf("Argument #%d: %s\n", argv[i]); 
    // run the 'real' program, giving it the rest of argv vector (1+) 
    // for example spawn, exec or system() functions can do it 
    return 0; // or you can do a blocking call, and pick the return value from the program 
} 
+0

Merci pour cela, je ne suis pas pris la peine quelle langue il se trouve. Idéalement, j'espérais qu'il y avait un moyen de manipuler un script batch pour faire semblant d'être un exécutable comme vous pouvez faire avec un script shell, puis faire redirection de flux. Je suppose que Windows s'attend à ce que les fichiers .exes soient compilés. – joejag

0

Rechercher whoami.exe, l'appui, le remplacer par votre propre exécutable et voir faire ce que vous voulez avec ses paramètres (peut-être les enregistrer dans un fichier texte).

1

Je ne pense pas que l'utilisation d'un "script" fonctionnera, puisque l'intermédiaire devrait avoir une extension .exe pour que votre stratagème fonctionne. Je voudrais écrire un très petit programme de ligne de commande pour ce faire; quelque chose comme ce qui suit (écrit en Delphi/virtuel Pascal il se traduira par un exécutable Win32, mais toute langue compilé devrait faire):

program PassThrough; 

uses 
    Dos; // Imports the Exec routine 

const 
    PassTo = 'Original.exe'; // The program you really want to call 

var 
    CommandLine: String; 
    i: Integer; 
    f: Text; 

begin 
    CommandLine := ''; 
    for i := 1 to ParamCount do 
    CommandLine := CommandLine + ParamStr(i) + ' '; 

    Assign(f,'Passthrough.log'); 
    Append(f); 
    Writeln(f, CommandLine);  // Write a line in the log 
    Close(f); 


    Exec(PassTo, CommandLine); // Run the intended program 
end. 
1

Tu ne peux pas changer juste le programme appelant pour enregistrer les paramètres qu'elle a utilisés appeler le processus, et le code de sortie? Ce serait beaucoup plus facile que d'essayer de creuser dans whoami.exe

+0

Hélas, je ne suis pas en contrôle du programme appelant – joejag

Questions connexes