Одно быстрое и простое решение - обернуть CertUtil
через ваше собственное консольное приложение и добавить его в реестр вместо для непосредственного запуска CertUtil
.
Допустим, приведенный ниже код предназначен для CertUtilWrapper
.
static void Main(string[] args)
{
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "CertUtil.exe",
Arguments = string.Join(" ", args)
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
}.Start();
Console.WriteLine(proc.StandardOutput.ReadToEnd());
Console.WriteLine(proc.StandardError.ReadToEnd());
proc.WaitForExit();
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
};
Затем измените свой код на
static void Main(string[] args)
{
string menuCommand = "CertUtilWrapper -hashfile \"%1\"";
Register("*", "HashFile", "Create Hash", menuCommand);
}
Очевидно, для этого требуется, чтобы CertUtilWrapper
был где-то в системе PATH
, так же, как и сам CertUtil
.
Есть и другие альтернативы. Вместо этого вы можете, например, вызвать cmd
, командный файл или сценарий PowerShell.
Ниже описано, как это сделать, используя cmd
. Это просто Обратите внимание, что переключатель /k
необходим, чтобы держать окно открытым.
Обратите внимание, что побочным эффектом является сохранение окна cmd
открытым вместе с приглашением (которое может сбить с толку конечных пользователей в зависимости от вашей аудитории). Мне лично этот недостаток не нравится.
static void Main(string[] args)
{
string menuCommand = "cmd /k CertUtil -hashfile \"%1\"";
Register("*", "HashFile", "Create Hash", menuCommand);
}