首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C#以编程方式运行procmon.exe

使用C#以编程方式运行procmon.exe
EN

Stack Overflow用户
提问于 2011-05-16 09:25:14
回答 2查看 1.8K关注 0票数 2

我有一个以编程方式运行procmon.exe的AutoIt代码。现在我想把代码翻译成C#,这样我就可以通过Microsoft Visual Studios运行它了,因此有人能指导我完成它吗?

AutoIt中的代码

代码语言:javascript
复制
{

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#吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-17 19:49:35

应该是这样的:

代码语言:javascript
复制
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);
    }
}

我手头没有那个注册表项或进程,所以我依赖Console.WriteLine来查看它,这是正确的。我唯一不知道怎么做的事情就是获取短名称,所以我只是导入了winapi函数并使用了它(取自here)。

票数 4
EN

Stack Overflow用户

发布于 2011-05-16 09:35:59

看一下Process类。您可以像这样使用静态方法Start:

Process.Start(commandLine);

其中,commandLine是您在运行中使用的字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6012433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档