Articles of 进程

查找包含特定文本的窗口

我试图find一个特定的窗口是否已被一个进程打开。 该过程会产生多个窗口,我需要检查所有的窗口。 我不难find这个过程 foreach (Process p in Process.GetProcesses()) { if (p.MainModule.FileName.ToLower().EndsWith("foo.exe")) FindChildWindowWithText(p); //do work 问题是接下来要做什么。 我不能使用Process的MainWindowText ,因为它随着激活的窗口而改变。 然后我试图使用Windows函数EnumChildWindows和GetWindowText ,但我不知道如果我传递一个正确的句柄EnumChildWindows。 EnumChildWindows在通过MainWindowHandle时按预期工作,但当然MainWindowHandle随活动窗口而变化。 所以我通过Process.Handle ,但是当切换应用程序的窗口时,我得到了不同的句柄和不同的结果。 (据我所知,EnumChildWindows不仅返回句柄,而且还包括.NET中的控件 ,如果我能得到窗口的标题也不会有问题) 也许我正在做这个错误的方式,我需要一个不同的方法 – 我的问题再一次find一个与特定的正则expression式匹配的文本的窗口。 所以我可能需要一个枚举所有窗口的function,在任务栏中可见等等。 谢谢

当python进程被杀死时杀死subprocess?

我正在写一个启动subprocess的Python程序(使用Popen)。 我正在读取subprocess的stdout,做一些过滤,并写入主进程的stdout。 当我杀死主进程(cntl-C)时,subprocess继续运行。 我如何杀死subprocess呢? 子过程就好像跑了很长时间。 上下文:我一次只启动一个subprocess,我正在过滤它的stdout。 用户可能决定中断尝试其他的东西。 我是python的新手,我使用windows,所以请温和。

我如何从Java终止进程树?

我在Java中使用Runtime.getRuntime()。exec()命令来启动一个batch file,这又会启动Windows平台的另一个进程。 javaw.exe(Process1) |___xyz.bat(Process2) |___javaw.exe(Process3) Runtime.getRuntime()。exec()返回一个具有destroy方法的Process对象,但是当我使用destroy()时,它只会杀死xyz.bat,并使batch file的subprocess悬而未决。 在Java中有没有一种干净的方式来销毁以批处理作为根开始的进程树? *我不能使用任何自定义库\摆脱batch file绕过问题

一旦进程结束,会发生什么?

如果我有一个窗口进程已经停止(死亡或刚刚结束)的句柄: 将句柄(或更好的背后的记忆)重新用于另一个过程? 或者将GetExitCodeProcess()从现在起永远得到正确的结果吗? 如果1.是真的:GetExitCodeProcess()如何工作? 如果2.是真的,那么这不意味着我可以通过启动/终止新进程来降低操作系统,因为我创build了越来越多的句柄(并且操作系统为它们保留了内存)? 我对手柄的概念有点困惑。 先谢谢你!

x64进程可以占用4GB RAM多less内存

我有一个x64应用程序。 这是一个有点沉重的应用程序(在线程数,内存需求等方面)。 我在4GB RAM 64位Windows7四核心机器上运行此应用程序。 但是我注意到,我的应用程序需要大约2.2-2.3 GB的RAM,它崩溃了。 这是否需要行为? 最大的64位应用程序可以从4GB的内存只需要2.3-2.4 GB的RAM?

提升链接器错误:无法parsing的外部符号“class boost :: system :: error_category const&__cdecl boost :: system :: get_system_category(void)”

我刚刚开始与Boost第一次,细节: 我正在使用Visual Studio 2008 SP1 我正在做一个x64生成 我只使用boost :: asio(以及它的任何依赖) 我的代码现在编译,我指出我的项目在boost库(build立x64库后),并通过简单的问题,现在我面临一个链接器错误: 2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)" (?get_system_category@system@boost@@YAAEBVerror_category@12@XZ) 2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_generic_category(void)" (?get_generic_category@system@boost@@YAAEBVerror_category@12@XZ) 有任何想法吗? 我添加了这个定义:#define BOOST_LIB_DIAGNOSTIC 现在在我的输出中我看到这个: 1>Linking to lib file: libboost_system-vc90-mt-1_38.lib 1>Linking to lib file: libboost_date_time-vc90-mt-1_38.lib 1>Linking to lib […]

CreateThread vs fork()

fork()和CreateThread之间有什么关系吗? 有什么CreateThread内部调用fork()?

从C#运行bat脚本

我试图从ac sharp程序运行批处理脚本我使用的代码如下所示: Process proc = new Process(); proc.StartInfo.FileName = "G:\\Media\\Downloads\\print.bat"; proc.Start(); 该脚本很简单(用于testing目的)并包含一行: echo hello > output.txt 当我从Windows资源pipe理器运行该脚本它的作品,但不从C#代码运行时。 有什么想法吗? 另外我怎样才能给进程一个callback方法,当它完成? 谢谢

C ++ TerminateProcess函数

我一直在寻找Win32 API C ++函数TerminateProcess()的例子,但找不到任何。 我对Win32 API并不熟悉,所以我想问一下,在这里比谁更好的人能给我一个例子, 通过它的PID检索进程句柄来终止它,然后用它调用TerminateProcess。 如果你不熟悉C ++,C#等价物也会有所帮助。

从以admin身份运行的进程中以用户身份启动进程

我想从一个以pipe理员身份运行的程序启动另一个以用户身份运行的程序。 问题是第二个程序需要使用outlook,如果程序以admin身份运行,这是不可能的。 主程序需要以pipe理员身份运行。 我已经想出了这两个解决scheme: Process.Start("cmd.exe", @"/C runas.exe /savecred /user:" + Environment.UserDomainName + "\\" + Environment.UserName + " " + "\"SomeProgram.exe" + "\""); 要么 Process.Start("explorer.exe", "SomeProgram.exe"); 但是我对这两个解决scheme都有问题。 第一个要求用户input密码(仅在Windows重新启动后第一次)。 第二个probalby未来不会工作,因为据我所知,它被认为是一个bug,并可能在未来更新。 所以我想知道有没有其他解决scheme,用户不需要input密码? 这似乎为我工作: Process.Start("cmd.exe", @"/C runas.exe /TrustLevel:0x20000 " + "\"SomeProgram.exe" + "\"");