Запуск procmon.exe программно с использованием C # - PullRequest
2 голосов
/ 16 мая 2011

У меня есть код в AutoIt, который запускает procmon.exe программно.Теперь я хочу перевести код на C #, чтобы я мог запустить его через Microsoft Visual Studios, поэтому кто-нибудь может подсказать мне, как его завершить?

Код в AutoIt

{

Global $scriptDir = FileGetShortName(@ScriptDir)

Global $logDir = "C:\\log\\registry\\"

Global $date = @YEAR & @MON & @MDAY

Global $time = @HOUR & @MIN & @SEC

$ReadUsername = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\COM\Upload", "I")

Run("procmon.exe /LoadConfig " & $scriptDir 
    & "\\registrymonitoring.pmc /Quiet /AcceptEula /BackingFile "
    & $logDir & $ReadUsername & "-" & $date & "-" & $time, "", @SW_HIDE)

}

Любой совет переводэто в C #?

Ответы [ 2 ]

4 голосов
/ 17 мая 2011

Это должно быть так:

using System;
using System.IO;
using System.Diagnostics;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.Win32;

class Program
{
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    public static extern int GetShortPathName(
        [MarshalAs(UnmanagedType.LPTStr)]
        string path,
        [MarshalAs(UnmanagedType.LPTStr)]
        StringBuilder shortPath,
        int shortPathLength
        );

    static void Main(string[] args)
    {
        string scriptDirLong = Directory.GetParent(Process.GetCurrentProcess().MainModule.FileName).FullName;
        StringBuilder scriptDir = new StringBuilder(255);
        GetShortPathName(scriptDirLong, scriptDir, 255);

        string logDir = @"C:\log\registry\";
        string date = System.DateTime.Now.ToString("yyyyMMdd");
        string time = System.DateTime.Now.ToString("HHmmss");

        string ReadUsername = (string)Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\COM\Upload", "I", null);

        Console.WriteLine(scriptDir + "\r\n" + logDir + "\r\n" + date + "\r\n" + time);
        Console.ReadKey();

        Process.Start("procmon.exe", 
            "/LoadConfig '" + scriptDir.ToString() + "\\registrymonitoring.pmc' /Quiet /AcceptEula /BackingFile " + 
            logDir + ReadUsername + "-" + date + "-" + time);
    }
}

У меня нет этого ключа реестра или procmon, поэтому я полагаюсь на Console.WriteLine, чтобы убедиться, что это правильно. Единственное, что я не мог понять, как это сделать, это получить короткое имя, поэтому я просто импортировал функцию winapi и использовал ее (взято из здесь ).

1 голос
/ 16 мая 2011

Посмотрите на класс Process .Вы можете использовать статический метод Start следующим образом:

Process.Start(commandLine);

, где commandLine - строка, которую вы используете в Run.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...