Порой возникает необходимость определения с какими аргументами одна программа запускает какую-то другую программу. Например у меня был случай, когда программа паковала 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+" "); } } } }