Articles of 进程

WINSDK:确定一个任意的pid是否标识Windows上正在运行的进程

试图执行一个穷人的testing过程是否仍在运行(本质上相当于微不足道的kill(pid, 0) 。 希望能够简单地调用OpenProcess一些最小的期望访问,然后testingGetLastError() == ERROR_INVALID_PARAMETER或GetExitCodeProcess(…) != STILL_ACTIVE 。 不错的尝试…在Windows XP上以pipe理员身份运行: HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); if (!hProc) { DWORD dwLastError = GetLastError(); } …当pid由不同的(不是SYSTEM)用户拥有时, dwLastError == ERROR_ACCESS_DENIED失败。 而且,如果pid最初由不同的用户拥有,但是自此终止,则OpenProcess也会因为ERROR_ACCESS_DENIED (而不是ERROR_INVALID_PARAMETER )而失败。 我必须使用Process32First / Process32Next或EnumProcesses吗? 我绝对不想使用SeDebugPrivilege 。 谢谢,V

在WIX中禁用WIN64DUALFOLDERSreplace

我有一个链接2 msi的设置 安装我的产品的x86 / x64 MSI。 一个部署第三方工具包的x86 MSI 我希望第二个MSI使用相同的安装目录,以便MSI 1将用户select的目录存储在MSI 2随后读取并用作其目标的registry中。 精细和花花公子 – 如果我安装微星1到C:\testing\没有问题 – 微星2拿起它,并把工具包放入该文件夹。 当我安装到c:\ Program Files文件时,然后MSI 2得到了一些聪明的答案,并决定我必须指出C:\ Program Files(x86),并把工具放在那里 – 有点混乱。 它logging下来的时候: Action start 16:53:59: AppSearch. MSI (c) (2C:44) [16:53:59:521]: Note: 1: 2262 2: Signature 3: -2147287038 MSI (c) (2C:44) [16:53:59:521]: WIN64DUALFOLDERS: 'C:\Program Files (x86)\' will substitute 17 characters in 'C:\Program Files\Manufacturer\Product' […]

终止进程树(C for Windows)

这已经被问过,但我无法find一个明确的答案,在代码中。 我打开一个进程ProcessA(带有PID 1234)。 这个过程打开一个subprocessProcessAB(PID 5678)。 完成之后,我终止了ProcessA,但我仍然有ProcessAB的挥之不去。 我如何终止整个过程树? 我的意思是,我如何确定如果我终止了我打开的进程,我也终止了所有相关的进程? 谢谢 代码表示赞赏。

为Windows x64预编译的SQLite二进制文件

是否有SQLite的Windows 64位预编译的二进制文件? 到目前为止,我无法find这样的 谢谢。

Python:Howto启动一个完整的进程而不是subprocess并检索PID

我想要: 从我的进程(myexe.exe arg0)启动一个新进程(myexe.exe arg1) 检索这个新进程的PID(os窗口) 当我用TaskManager的Windows命令“结束进程树”杀死我的第一个实体(myexe.exe arg0)时,我需要新的(myexe.exe arg1)不会被杀死… 我玩过subprocess.Popen,os.exec,os.spawn,os.system …没有成功。 解决问题的另一种方法:如果有人杀死myexe.exe(arg0)的“进程树”,如何保护myexe.exe(arg1)? 编辑:同样的问题(没有答案)在这里 编辑:下面的命令不保证subprocess的独立性 subprocess.Popen(["myexe.exe",arg[1]],creationflags = DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP,close_fds = True)

在<4GB RAM的64位虚拟机上Java中的对象头大小

我想知道是否有某种方法让64位虚拟机使用8字节对象头而不是12字节对象头,如果JVM的可用RAM是4GB的话。 还是这样在Linux上,如果不是在Windows上? 有人可以testing这个代码? import java.lang.reflect.Field; import sun.misc.Unsafe; public class ObjectSizes { String s1; String s2; public static void main(String[] args) throws Exception { Unsafe unsafe; try { Field field = Unsafe.class.getDeclaredField("theUnsafe"); field.setAccessible(true); unsafe = (Unsafe)field.get(null); } catch (Exception ex) { throw new RuntimeException("Can't get Unsafe instance.", ex); } Field s1Field = ObjectSizes.class.getDeclaredField("s1"); Field s2Field = […]

如何在Windows中为进程分配超过2GB的内存?

我正在运行一个程序来构build一个非常大的对象,我将从这个过程中分配超过2GB的内存而获益匪浅。 提前致谢。

如何等待非subprocess退出

对于subprocess,可以使用wait()和waitpid()函数暂停当前进程的执行,直到subprocess退出。 但是这个函数不能用于非subprocess。 是否还有另一个function,可以等待任何进程退出?

可以64位EXE链接对32位DLL?

我问,因为我注意到,许多64位的EXE链接到似乎是32位的DLL。 例如,我的64位MFC应用程序链接对user32.dll, urlmon.dll, wininet.dll – 所有这些都是32位DLL驻留在Windows \ system32中。 那么,这是适用于这些DLL的MS特定的魔术,还是有向后兼容,对于需要使用传统32位DLL的64位EXE?

读取USB HID条码扫描器input而不知道VID和PID

我试图开发条形码扫描仪的设备独立库,它必须在Windows环境中工作。 我已经在这个领域做了一些研究,afaik这个问题的大部分解决scheme都取决于特定的设备VID&PID(RawInput @ filter by vid&pid string),在我的情况下这是不可接受的,因为我试图开发一个独立于设备解决scheme,这将与任何USB条形码扫描仪。 其实这件事情相当具有挑战性,至less对我来说,这是确切的要求。 另外我不能要求用户热插拔设备(在这种情况下,我可能只是检测插入设备,并提取它的VID / PID)。 另外我不能使用设备的VID和PID数据库。 一般来说,我实际上不能使用vid&pid。 我也不能以任何方式重新编程条码扫描器,除非它是从我的程序完成(也许我可以发送一些barcodescanner特定的IOCTLs,这将使它回答我?)。 目前我将要使用在这个问题中提出的解决scheme: 使用USB条形码扫描仪读取条形码,同时忽略键盘数据input,而扫描仪产品ID和供应商ID未知 另外我也看到了商业图书馆(这是一个没有任何资源和关于它如何实现的信息,但是考虑到他们在他们的更新日志中有一些词汇“性能计数器”,我想他们在上面的链接中使用了解决scheme)实现这个function,但在x64系统中不起作用。 可能是因为代码混乱,或者因为它可能使用某种filter(迷你)驱动程序。 这是encryption的,我不能重新分配它。 我确切的问题是:有什么办法来确定这个HID键盘实际上不是一个键盘,而是一个条形码扫描仪? 我已经在Win 7 x64上看到它连接成条形码扫描器,而不是键盘(这是一个系统错误,或者某种)。 到底我在做什么: 通过RID_INPUTSINK读取input。 通过设备的vid&pid区分所有input 当VK_ENTER显示在缓冲区中时,将所有input放入单独的缓冲区并从缓冲区收集条形码。 我现在要做的是: 通过RID_INPUTSINK读取input 为特定设备启动计时器,如果下一个符号是VK_ENTER – 停止计时器 如果定时器超过50毫秒限制 – closures它,并放弃所有进一步的设备input。 如果设备将成功读取从第一个符号到VK_ENTER的字符序列 – 提取设备VID&PID /句柄,并以更方便的方式使用(无时间限制)。 我在C ++,纯WinAPI上开发它,它将是一个DLL库,并且可以在x32-86和x32-64体系结构中的Windows XP,Vista,7,8上运行。 更新0:刚刚发现,条码扫描器有自己的usagePage和使用USB规格: http ://www.usb.org/developers/devclass_docs/pos1_02.pdf 根据这个文件USB条形码扫描仪有UsagePage 0x8C和用法0x02。 不幸的是我没有把它作为RAWINPUTDEVICE.dwUsage和RAWINPUTDEVICE.dwUsagePage使用。 可能是因为系统安装它的USB键盘驱动程序的顶部和用户模式,它是真正的USB键盘无法区分。 这些值可能在kernelmode环境中可用(其中一个选项是开发hid筛选器驱动程序)。