2011-05-16 51 views
2

我在AutoIt中有一個以編程方式運行procmon.exe的代碼。現在我想將代碼翻譯成C#,以便我可以通過Microsoft Visual Studios運行它,因此任何人都可以指導我完成它?在AutoIt的以編程方式使用C#運行procmon.exe

{ 

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

回答

4

這應該是它:

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函數並使用它(取自here)。

+0

非常感謝!你的建議對我很有幫助!祝賀你! – Derek 2011-05-20 02:03:04

1

看看Process這個課。 您可以使用靜態方法開始這樣的:

Process.Start(commandLine);

其中命令行是你在運行使用的字符串。

相關問題