Tag: process

在NTVDM下运行的16位应用程序

我正在捕获执行一些我们内部人员不再使用的旧16位应用程序。 它们是1985年的DOS应用程序,因此捕获它们很容易…捕获在NTVDM.exe下启动的任何进程 现在,问题是找出NTVDM实际上在哪个程序下运行。 显然,1985年的程序中有几个应该被允许运行,所以我需要看到隐藏在NTVDM下的实际EXE名称。 WqlEventQuery query = new WqlEventQuery(“__InstanceCreationEvent”, new TimeSpan(0, 0, 1), “TargetInstance isa \”Win32_Process\””); ManagementEventWatcher watcher = new ManagementEventWatcher(query); watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived); watcher.Start(); … static void watcher_EventArrived(object sender, EventArrivedEventArgs e) { ManagementBaseObject instance = (ManagementBaseObject)e.NewEvent[“TargetInstance”]; ProcessInfo PI = new ProcessInfo(); PI.ProcessID = int.Parse(instance[“ProcessID”].ToString()); PI.ProcessName = instance[“Name”].ToString(); PI.ProcessPath = instance[“ExecutablePath”].ToString(); // Here’s the […]

在新进程中运行时,窗口标题中的“无响应”

我有一个必须在UI线程上运行的长时间运行方法。 (Devex – gridView.CopyToClipboard() ) 我不需要UI在复制时响应,我添加了一个启动画面,这样用户就不会觉得无聊了。 当我运行这个程序时一切都很好。 当我运行一个不同的程序时,麻烦就开始了,而这个程序又启动了一个新进程并在其上运行程序。 复制几秒后标题读取(Not Responding)并且鼠标光标显示忙,它当然会在几秒钟内清除但我想摆脱它,因为它给用户误解了程序的感觉是错误的。 有没有办法设置我创建的流程的“超时”? 编辑: 主程序调用以下代码: fillsProcess = new Process(); fillsProcess.StartInfo.FileName = Application.ExecutablePath; fillsProcess.Start(); 在fillsProcess中,当单击某个按钮时,将调用以下代码: gridViewToCopy.CopyToClipboard(); 这行代码需要一段时间来处理,几秒钟后,fillsProcess的窗口看起来没有响应,因为此方法在UI线程上运行。 编辑第二名: 显然(并且非常可以理解) gridViewToCopy.CopyToClipboard(); 不是导致此问题的唯一方法。 许多Devex方法必须在UI线程上运行(例如,数据排序,数据过滤) 所以感谢任何提供特定解决方案的人(无论是否有效),但我的原始问题再次突然出现: 有没有办法改变超时时间或以某种方式控制整个“无响应”的惨败?

如何启动优先级较低的流程? C#

我想执行命令行工具来处理数据。 它不需要阻止。 我希望它是低优先级。 所以我写了下面的内容 Process app = new Process(); app.StartInfo.FileName = @”bin\convert.exe”; app.StartInfo.Arguments = TheArgs; app.PriorityClass = ProcessPriorityClass.BelowNormal; app.Start(); 但是,我收到一个System.InvalidOperationException ,并显示消息“没有进程与此对象关联”。 为什么? 如何以低优先级正确启动此应用程序? 没有行app.PriorityClass = ProcessPriorityClass.BelowNormal; 该应用运行正常。

绩效柜台类别名称? (C#)

我正在尝试在性能计数器中编程到我的C#应用​​程序中,该应用程序启动另一个进程并检查该已启动进程的处理器使用情况。 据我了解,性能计数器类要求我分配类别名称,计数器名称和进程名称。 我可以很容易地获得流程名称,但是在互联网上是否有某种类型的列表,其中包含我可以分配的所有类别和计数器名称? 我试过在MSDN上搜索这样的东西,但我没找到任何东西。 感谢您的帮助!

如何通过手动输入流将命令提供给cmd.exe进程?

问题听起来有点密集。 这是一个稍长的版本: 我需要让主循环等待用户输入,并且还要运行一个进程并等待用户输入要发送到的流的输入。 全文:我正在构建一个Cmd模拟器,起初一切看起来都很好:用户输入一个命令,它会回显到输出区域,处理完毕,StdOut和StdErrOut被捕获并添加到输出TextBox中。 唯一的问题是,当为每个命令创建并单独启动cmd进程时,没有保留任何状态。 既不是变量也不是代码页,也不是工作目录等。 所以我决定发明一点hack:输入一个开括号或右括号开始和停止收集命令而不是执行它们。 在右括号之后,在processBatch方法中使用命令列表(’batch’)将它们全部提供给cmd进程,并将其重定向输入。 工作得很好。 唯一的问题是,显然,现在我已经获得状态但是立即失去了响应,因此在批处理运行之前不会弹出任何错误。 因此,我决定将好的部分结合起来,而且,当我意识到,为了保持两个循环工作并等待我必须使用线程,我知道我正在找麻烦。 多年来我没有做过…… 在布局中,我选择了main()循环等待用户输入,startCMDtask()在任务中运行startCMD()。 这里扫描输入流,直到有数据,然后cmd进程处理它们。 但它不起作用。 List batch = new List(); public volatile string output = “+”; public volatile string outputErr = “-“; Process CMD; Task cmdTask; volatile Queue cmdQueue = new Queue(); volatile public bool CMDrunning = false; 这个工作得很好 private void processBatch() { Process p […]

如何使用C#监控进程的IO活动?

使用FileSystemWatcher,我们可以监视特定文件系统的IO活动,但无论如何要知道哪个正在运行的进程导致该IO? 更具体地说,假设一个正在运行的进程即。 abc.exe正在驱动器D上创建一个文件text.txt。我们可以使用FileSystemWatcher监视已在驱动器D中创建了一个名为text.txt的文件,但我们是否可以通过编程方式确定名为abc.exe的进程正在创建该特定文件在驱动器D?

以编程方式重新启动IIS

我需要从C#/ .NET应用程序重新启动IIS。 这似乎是一个微不足道的问题,但到目前为止我还没有取得成功, 这个问题的答案都没有奏效。 我是这台机器的本地管理员。 我试过这个: var process = new Process { StartInfo = { Verb = “runas”, WorkingDirectory = @”C:\Windows\System32\”, FileName = @”issreset.exe” } }; process.Start(); 但是这会抛出一个Win32Exception – cannot find the file specified. 我还尝试了将整个路径放在FileName ,并使用UseShellExecute各种组合,但这些选项都没有帮助。 我也试过通过命令行调用它: var process = new Process { StartInfo = { Verb = “runas”, WindowStyle = ProcessWindowStyle.Hidden, FileName = @”cmd.exe”, […]

Process.Start(“IEXPLORE.EXE”)在启动后立即触发退出事件..为什么?

我在xp中安装了IE8有一个奇怪的问题。 我试图使用c#中的System.Diagnostics.Process.Start方法启动IE。 我需要捕获IE的退出事件并执行一些操作。 但我最终遇到了一个相当奇怪的问题,IE在发布后会立即触发退出的事件。 这是示例代码 Process objProcess = Process.Start(“IEXPLORE.EXE”, “http://google.com”); if (objProcess != null) { objProcess.EnableRaisingEvents = true; objProcess.Exited += new EventHandler(myProcess_Exited); } public static void myProcess_Exited(object sender, System.EventArgs e) { MessageBox.Show(“You exited”); } 但上面的代码完全适用于laucnching不同的进程(例如:记事本),当我关闭exe时它会触发退出事件。 这只会让问题启动IE 8.有人可以澄清我的问题是什么? UPDATE 大多数朋友回复了我的post,并说为什么你不能只使用URL? 为何坚持使用IE? 这里的原因 该应用程序的最终目的是从Windows应用程序启动URL,并在IE上工作时隐藏exe。 关闭IE后显示exe。 谢谢

如何在C#中确定当前关注的进程名称和版本

例如,如果我正在使用Visual Studio 2008,我想要值devenv和2008或9。 版本号非常重要……

“优雅地”杀死一个进程

现在我正在使用Process.Kill()来杀死进程。 有没有办法,而不是立即杀死它,我可以向进程发送一条消息,指示它关闭,以便它可以优雅地清理和关闭。 基本上,我正在寻找仅仅点击右上角的红色X的等价物,我相信它会向请求关闭的应用程序发送消息。