Tag: system.diagnostics

使用System.Diagnostics.Process.Start运行程序会导致应用程序错误

在我的PC上打开DWG文件: “C:\Program Files\AutoCAD LT 2007\acadlt.exe” “%1” 如果我从命令行运行它: “C:\Program Files\AutoCAD LT 2007\acadlt.exe” “C:\Some Path\Test.dwg” AutoCAD Lite打开DWG文件。 类似地,如果我打开命令提示符并使用参数运行相同的exe,它可以正常工作。 但是,如果我使用 var proc = new System.Diagnostics.Process(); var info = new System.Diagnostics.ProcessStartInfo(); 然后 info.FileName = “C:\Some Path\Test.dwg”; proc.StartInfo = info; proc.Start(); 要么 info.FileName = “C:\Program Files\AutoCAD LT 2007\acadlt.exe”; info.Arguments= “C:\Some Path\Test.dwg” proc.StartInfo = info; proc.Start(); 要么 info.FileName = “cmd.exe”; info.Arguments= […]

Process.Start()可以考虑系统PATH吗?

我一直在寻找和试验一段时间,但我没有运气。 我正在尝试制作一个控制台程序来自动完成一些我无法用BAT文件完成的任务。 我想从Windows SDK调用“signcode.exe”,bin文件夹包含系统PATH中的所有工具,我可以从任何地方调用“signcode”,但Process.Start忽略了路径。 当前代码: System.Diagnostics.Process sign = new System.Diagnostics.Process(); sign.StartInfo.FileName = signCommand.Substring(0, signCommand.IndexOf(‘ ‘)); // signtool.exe sign.StartInfo.Arguments = signCommand.Substring(signCommand.IndexOf(‘ ‘) + 1); // /sign /a file1 file2 // sign.StartInfo.EnvironmentVariables[“Path”] = Environment.GetEnvironmentVariable(“PATH”); // This doesn’t work either sign.StartInfo.UseShellExecute = false; sign.StartInfo.RedirectStandardOutput = true; sign.StartInfo.RedirectStandardError = true; sign.Start(); // Throws Win32Exception – The system cannot find […]

在Windows 7下启动System.Diagnostics.Process时出现问题

我试图从.NET 3.51启动一个应用程序(操作系统,我的应用程序和我要启动的应用程序都是32位)。 启动Process的代码用于其他应用程序,但是有一个令我们头疼的问题。 如果我们在应用程序的图标上“双击”它,它按预期工作,这意味着它可以作为计算机中的应用程序正常工作。 直接双击.exe也可以。 操作系统是Windows 7 32位(家庭和/或专业)。 我们的.NET应用程序使用x86编译以避免出现问题。 启动“Processes”的代码位于我们制作的DLL(也是32位)内部,基本上它是一个简单的DLL,它包含一些“通用代码”,我们在整个代码中使用的常用方法,函数和内容。 其中一种方法看起来像这样: public static bool FireUpProcess( Process process, string path, bool enableRaisingEvents, ProcessWindowStyle windowStyle, string arguments ) { if ( process != null ) { try { process.StartInfo.FileName = @path; if ( arguments != null ) { if ( arguments != String.Empty ) { process.StartInfo.Arguments = […]

System.Diaganostics.Process.Id不是任务管理器中显示的相同进程ID。 为什么?

我正在使用C#的System.Diagnostic.Process对象。 它的一个属性是Id 。 此生成的Id与Windows Task Manager显示的PID 。 为什么是这样? 一旦这个过程开始,你会看到。 它启动了另外两个非托管进程,我无法通过对象属性引用显式获取ID。 我必须搜索所有进程,通过System.Diagnostics.Process.GetProcesses()按进程名称查找它们。 我正在尝试通过PID找到一种可靠的方法来终止此进程和所有关联的进程,这是在Task Manager中显示的进程。 有没有更好的办法? 我不能用关联的进程名称杀死所有进程,因为这可能会杀死那些与我的程序无关的进程的其他实例。

获取CPU和RAM使用率

我需要在执行进程期间获取ram内存和CPU使用率(该进程有时可以运行超过30分钟)。 与任务管理器的值相比,我能够获得可用RAM但CPU使用率不正确。 难道我做错了什么? 这是我的代码: class Program { static List AvailableCPU = new List(); static List AvailableRAM = new List(); protected static PerformanceCounter cpuCounter; protected static PerformanceCounter ramCounter; static void Main(string[] args) { cpuCounter = new PerformanceCounter(); cpuCounter.CategoryName = “Processor”; cpuCounter.CounterName = “% Processor Time”; cpuCounter.InstanceName = “_Total”; ramCounter = new PerformanceCounter(“Memory”, “Available MBytes”); try { […]

获取字段的行号而不使用ac#parser

我想获得一个类型字段的行#s。 要获取方法中语句的行#,这很简单: Type type = typeof(MyClass); MethodInfo methodInfo = type.GetMethod(“SomeMethod”); int token = methodInfo.MetadataToken; ISymbolReader reader = SymUtil.GetSymbolReaderForFile(@”dllName”, null); // from mike stall’s pdb2xml ISymbolMethod methodSymbol = reader.GetMethod(new SymbolToken(token)); int count = methodSymbol.SequencePointCount; ISymbolDocument[] docs = new ISymbolDocument[count]; int[] startColumn = new int[count]; int[] endColumn = new int[count]; int[] startRow = new int[count]; int[] endRow […]

我应该在TraceSource.TraceEvent方法中使用id参数识别什么?

我使用TraceSource类来登录我的.NET项目。 然而,我从未明确过的一点是, TraceEvent方法中id参数的意图是什么。 目前,我总是把它设置为0。 但它的预期或典型有用用途是什么? 我可以想到几个可能性: 它是事件发生的ID(即同一行代码在每次执行时产生不同的ID); 它是方法调用的ID(即,您可以从ID推断出代码行); 它是一系列类似事件的ID(例如,表示数据库不存在的所有错误消息共享相同的ID); 它是与逻辑操作相关的一组事件的ID,与TraceEventType.(Start|Stop|Suspend|Resume|Transfer)结合使用TraceEventType.(Start|Stop|Suspend|Resume|Transfer)枚举值;

如何运行控制台应用程序,捕获输出并将其显示在Literal中?

我看到我可以使用System.Diagnostics.Process启动进程。 我正在尝试使用以下代码,但它无法正常工作。 页面只是挂起,我必须重新启动IIS … using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Diagnostics; public partial class VideoTest : System.Web.UI.Page { List outputLines = new List(); bool exited = false; protected void Page_Load(object sender, EventArgs e) { string AppPath = Request.PhysicalApplicationPath; Process myProcess = new Process(); myProcess.StartInfo.UseShellExecute = false; myProcess.StartInfo.FileName = AppPath + […]

事件记录IPAddress并不总是解析

我正在使用System.Diagnostics.Eventing.Reader.EventLogWatcher类挂钩安全事件日志,我正在观察2008服务器盒上的事件ID 4625,以查看传入的失败登录(特别是RDP)。 日志捕获工作正常,我将结果转储到队列中以进行相关的后续处理。 但是,有时捕获的日志会填充(解析)IPAddress数据字段,有时则不会。 我在观看服务器的同时运行windump,尝试从不同的服务器和操作系统风格进行常规的RDP登录,我可以得出的唯一结论是版本差异问题,而且编码也不错。 虽然我错了,LOL。 问题在于事件日志本身与这些连接有关。 记录所有失败的RDP登录,并正确处理,但某些日志根本不记录失败连接的源IP地址。 一些较新的mstsc风格会不会导致远程事件日志不记录源IP地址? 对于我对这个挂钩服务器运行的任何其他2008服务器来说,这似乎都是正确的。 到目前为止我尝试过的任何2003或XP机器都已正确记录。 如果您需要更多信息,请告诉我们。 谢谢! 编辑 我是否需要做一些疯狂的事情 – 比如实施sharpPcap并将IP与事件日志相关联? = /。 也许可以查询lsass(这不是通常写入安全日志的唯一内容)吗?

将Trace方法添加到System.Diagnostics.TraceListener

我写了一个从System.Diagnostics.TraceListener派生的Log类,就像这样 public class Log : TraceListener 这充当了Log4Net的包装器,允许人们像这样使用System.Diagnostics Tracing Trace.Listeners.Clear(); Trace.Listeners.Add(new Log(“MyProgram”)); Trace.TraceInformation(“Program Starting”); 有一个请求添加其他跟踪级别,然后是默认跟踪级别(错误,警告,信息) 我希望将此添加到System.Diagnostics.Trace中,以便可以像使用它一样使用 Trace.TraceVerbose(“blah blah”); Trace.TraceAlert(“Alert!”); 有什么方法可以用扩展类做到这一点吗? 我试过了 public static class TraceListenerExtensions { public static void TraceVerbose(this Trace trace) {} } 但是传入的跟踪实例没有公开任何内容:(