Порой возникает необходимость определения с какими аргументами одна программа запускает какую-то другую программу. Например у меня был случай, когда программа паковала zip-архив с DBF-таблицами, но пароль на архив не был доступен. Он передавался в качестве аргумента файлу 7z.exe. Для того, чтобы поймать аргументы я придумал следующее решение:

Написал на языке C# программу, которая все аргументы, с которой была вызвана моя программа складывает в файл result.txt. Затем подменяю вызываемый файл, в моём случае 7z.exe моей программой, предварительно сохранив рабочий файл 7z.exe в другом каталоге. Упаковка, конечно, не произойдет, и, возможно, основная программа будет ругаться, что архив не создан, но нас это уже не будет волновать, так как все параметры, с которой пытался запуститься 7z.exe будут записаны в файл result.txt. Там же мы найдем и пароль:

Пример сформированного файла result.txt:

a -tzip -pPassword123 C:\VPOL\WS\\PT9999.zip l_*.dbf

 

Исходный код программы:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HookOfArg
{
    class Program
    {
        static void Main(string[] args)
        {

            File.Delete("result.txt");
            foreach (var arg in args)
            {
                File.AppendAllText("result.txt", arg+" ");
            }

        }
    }
}