Articles of 进程

在32位和64位Windows版本上的进程大小和行为差异

我正在调查我的应用程序的一个奇怪的问题,其中2个版本的Windows的行为是不同的: Windows XP(32位) Windows Server 2008(64位) 我的发现如下。 Windows XP(32位) 在运行我的testing场景时,XMLparsing器在parsing一个非常大的configuration文件的过程中某个时候失败(请参阅此问题以获取更多信息)。 在失败时,进程大小约为2.3GB。 请注意,registry项已设置为允许进程超过默认的最大进程大小(在32位操作系统上)为2GB。 失败的系统是调用IXMLDOMDocument::load()失败,如上面链接的问题中所述。 Windows Server 2008(64位) 我在Windows Server 2008中运行完全相同的testing场景 – 唯一的variables是操作系统。 当我看着我的任务pipe理器下的进程,它旁边有一个* 32 ,我假设它意味着它在32位兼容模式下运行。 我注意到的是,在Windows XP上XMLparsing失败的地方,Windows Server 2008上的进程大小只有大约1GB(IOW,大约是Windows XP的一半进程大小)。 在Windows Server 2008上,XMLparsing不会失败,它一切正常。 我的问题是: 为什么32位应用程序(以32位模式运行)在64位操作系统上占用一半内存量? 是真的使用了一半的内存,它是不同的通常的虚拟内存,还是其他的东西? 确认我的应用程序(似乎)使用Windows Server 2008上的一半内存量,没有人有任何想法,为什么XMLparsing将在Windows XP上失败? 每次运行testing用例时,通过IXMLDOMParseError访问的错误(请参阅此答案 )是不同的。 因为这似乎是非确定性的,它暗示我正在遇到内存使用问题,而不是处理格式不正确的XML。

SQLite3.dll的Windows 7 64位

在我的C#应用​​程序中,我使用了32位体系结构的sqlite3库,并且工作正常。 要使用它,我已经将sqlite3.dll文件复制到我的/ bin目录中,并创build了一个名为SQLiteWrapper的类,该类使用此语句导入sqlite.dll [DllImport("sqlite3.dll", EntryPoint = "……..")] 现在,我应该下载这个DLL文件还为64位体系结构。 我可以在哪里下载?

在64位Windows上列出正在运行的进程

我amm写一个小的python脚本,将从我正在运行的Windows虚拟机中获取信息。 目前我可以使用以下方法在32位XP机器上列出进程: http://code.activestate.com/recipes/305279/ 是否有可能以某种方式检测正在运行的Windows版本,并执行一个不同的方法来获取64位机器上的进程,我试图从64位Vista和64位Windows 7获得进程。 有任何想法吗?

JNA – 查询Windows进程

我正在尝试使用JNA来返回特定Windows进程的详细信息。 不完全确定如何做到这一点。 无法在互联网上find很多帮助。 我想返回的一些信息包括CPU和内存使用情况。 下面只是我find的一个例子。 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import com.sun.jna.*; import com.sun.jna.Library.Handler; import com.sun.jna.platform.win32.*; import com.sun.jna.platform.win32.Advapi32Util.*; import com.sun.jna.platform.win32.WinNT.*; import com.sun.jna.ptr.IntByReference; import com.sun.jna.win32.*; import com.sun.jna.Native; import com.sun.jna.platform.win32.*; import com.sun.jna.win32.W32APIOptions; public class WindowsProcess { public static void main(String[] args) { WinNT winNT = (WinNT) Native.loadLibrary(WinNT.class, W32APIOptions.UNICODE_OPTIONS); […]

在winapi中以最低的权限运行进程

我写的东西类似于http://ideone.com/ 。 目前我正在用CreateProcess调用运行用户进程。 如果运行时间超过指定的时间,我会终止进程,但是我不知道如何拒绝读/写文件系统权限/创build进程权限等等。 给定的可执行文件可以从字面上任何东西,我只需要只允许标准input/标准输出。 如果我可以设置工作记忆,那也是很好的。 我读了很多关于msdn的文章,比如CreateProcessAsUser Function , CreateProcessWithLogonW Function等,但是我很困惑(可能是因为我的win32知识非常有限)。 只需调用CreateProcessAsUser并使用这些有限权限(以及如何创build此用户)创build特殊用户即可。 我希望我能用一个正确的参数在一个函数调用中实现这一点,所以请帮助。 另外,如果你知道一些类似的开源项目,那就太好了。 谢谢。 ================================================== ======== 编辑:嗨再次:)我仍然坚持这一点。 我没有足够的时间来处理这个问题,但我猜snemarch post是非常有用的。 如果有人开箱即用的解决scheme,那就太好了。 如果我用snemarch的链接做什么,我会发布。

打开一个文件夹,并用WPF高亮显示一个特定的文件

有没有办法启动一个资源pipe理器窗口,并突出显示该文件夹中的WPF文件? 我已经尝试了以下内容: Process ExplorerWindowProcess = new Process(); ExplorerWindowProcess.StartInfo.FileName = "explorer.exe"; ExplorerWindowProcess.StartInfo.Arguments = ConfigFile.File.FullName; ExplorerWindowProcess.Start(); …但打开文件(在我的情况下,一个XML文件)与Windows资源pipe理器中的默认应用程序,我非常不希望。 我知道可用于Eclipse的Aptana工具允许您在Eclipse项目浏览器中select一个文件,并按照需要在资源pipe理器中显示文件,但是我需要一种在WPF应用程序中实现此function的方法。

如何重新使用现有/已打开的Windows资源pipe理器窗口来启动资源pipe理器

我有一个经常使用启动explorer.exe的应用程序。 我想重新使用现有/已经打开的资源pipe理器窗口,而不是每次启动过程时都创build一个新窗口。 这是我的代码看起来像: System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo { UseShellExecute = true, FileName = "Explorer.exe", Arguments = myDirectoryPath }; System.Diagnostics.Process.Start(info); 我没有看到一个命令行开关来做到这一点。 我尝试的一种方法是简单地杀死任何一个现有的浏览器进程,并将其replace为新的进程: var processes = System.Diagnostics.Process.GetProcesses(Environment.MachineName);int kills = 0; for (int i = 0; i < processes.Length; i++) { System.Diagnostics.Process p = processes[i]; if (p.ProcessName == "explorer" && kills < 1) ++kills p.Kill(); } 但是这会造成不必要的影响,不仅仅是杀死一个进程,而是彻底杀死资源pipe理器,甚至是任务栏也会消失。 […]

我如何等待Windows进程及其subprocess全部退出?

我们有一个启动程序,执行一些设置(启动服务器),启动subprocess,等待(通过工作线程)subprocess退出,然后做一些清理(停止服务器)。 这已经到位,工作正常。 不过,我们的一些应用可以启动其他应用。 例如,启动程序可能启动应用程序A,然后我可以单击启动应用程序B的应用程序A中的button。然后closures应用程序A,启动程序的Process.WaitForExit调用返回,启动程序停止服务器 – 不知道应用程序B仍在运行。 我们只使用启动器进行开发testing,所以这不是一个危机,但是当应用B试图与服务器交谈并崩溃时,这是不方便的。 开始一个subprocess,然后等待它(和它的任何subprocess)退出的最好方法是什么? 这些应用程序(启动器和应用程序都启动)都在.NET中。 如果我必须在每个应用程序中编写特殊的代码(例如打开一个指定的信号量)来完成这个工作,那就好了; 我只是不确定最好的办法。 奖励积分,如果有一些方法只能等待我的应用程序完成 – 例如,如果我的应用程序启动记事本,我不想等待记事本closures; 我只想等待需要服务器的应用程序。 但这不是一个要求,只是一个很好的。

为什么Python 2.7 AMD 64安装程序似乎在32位模式下运行Python?

我已经从python.org的python-2.7.amd64.msi包中安装了Python 2.7。 它安装并正确运行,但似乎是在32位模式下,尽pipe安装程序是一个64位安装程序。 Python 2.7 (r27:82525, Jul 4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys, platform >>> platform.architecture() ('64bit', 'WindowsPE') >>> sys.maxint 2147483647 我能做些什么来安装Python,以便它实际上在64位模式下运行?

什么是Windows上的最大进程ID?

什么是我可以通过调用DWORD GetProcessId(HANDLE)或DWORD GetCurrentProcessId()获得最大的进程ID? 它没有logging在API的文档页面上。