2

頻繁にクラッシュするWindows実行可能ファイル(whoami)があります。現在のユーザーとドメインに関する詳細を取得するために、別のプロセスから呼び出されます。失敗したときに渡されるパラメータを知りたいのですが。

プロセスをラップし、プロセスを呼び出している間にログに記録するコマンドライン引数を書き込む適切な方法を知っている人はいますか?

コマンドが次のように使用されているとします:'whoami.exe / all'

この呼び出しをログに書き込んでから実際のプロセスに呼び出しを渡すwhoami.exe(同じファイル名)の代わりにスクリプトを存在させたいのですが。

4

6 に答える 6

1

あなたは、どのプログラミング言語に注目していませんでしたか。必要に応じて .bat ファイルから実行することはできませんが、任意のプログラミング言語で実行できます。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
}
于 2008-09-22T10:45:12.063 に答える
1

「スクリプト」を使用しても機能しないと思います。中間ファイルには、策略が機能するための .exe 拡張子が必要だからです。

これを行うには、非常に小さなコマンド ライン プログラムを作成します。次のようなものです (Delphi/Virtual Pascal で記述されているため、Win32 実行可能ファイルになりますが、コンパイルされた言語であれば実行できます)。

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.
于 2008-09-22T10:47:54.490 に答える
1

呼び出し元プログラムを変更して、プロセスの呼び出しに使用したパラメーターと終了コードをログに記録することはできませんか? これは、whoami.exe を掘り下げるよりもはるかに簡単です。

于 2008-09-22T10:51:13.953 に答える
1

バッチ ファイルから:

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

コマンドラインパーサーは基本的にそれらをエスケープ解除し、他の実行可能ファイルに渡す前に再度エスケープする必要があるため、パラメーターにスペースが含まれている場合 (および " でエスケープを渡した場合) に問題が発生する可能性があることに注意してください。

于 2008-09-22T10:57:10.693 に答える
0

whoami.exe を探してバックアップし、独自の実行可能ファイルに置き換えて、そのパラメーターで好きなことを実行してください (テキスト ファイルに保存することもできます)。

于 2008-09-22T10:45:47.273 に答える
0

クラッシュを再現できる場合は、クラッシュしたプロセスが終了する前に Process Explorer を使用して、そのコマンド ラインを確認します。

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

于 2008-09-22T11:38:31.063 に答える