2010-06-04 41 views
2

start Windows外壳命令(在cmd.exe的)似乎能够启动一个过程选定的处理器的亲和性,而不是在开始过程然后设置所选择的处理器相似性在开始后的一段(小)时间段内。“开始/亲和力”等效于.NET

start /affinity 2 something.exe 

有没有办法在.NET应用程序中使用或不使用P-Invoke执行同样的操作?调用cmd.exe /C start ...不算。

Process类具有ProcessorAffinity属性,但如果在调用Start方法之前尝试设置它,则会抛出InvalidOperationException

+3

你确定内部'start'没有启动进程然后设置亲和力吗? – Andrey 2010-06-04 18:06:50

+0

@Andrey我们如何找出内部的起点? – xyz 2010-06-04 18:25:24

+0

我想我的假设是错误的,看起来像杰里棺材知道的秘密 – Andrey 2010-06-04 18:26:58

回答

4

我怀疑启动命令在这种情况下是如何启动进程挂起的(即在调用CreateProcess时通过CREATE_SUSPENDED),然后设置处理器亲和性,然后恢复该线程。

通过这种方式,当处理存在而没有被设定的处理的亲和性,由一次启动执行处理器亲和力已被设置,因此它在指定处理器上只有永远运行。

1

我不认为您可以在启动进程之前设置处理器关联性,因为SetProcessAffinityMask Function的第一个参数是处理进程的。

另一方面,有一个名为Imagecfg的程序,它允许永久性地为可执行文件设置处理器关联性,但我不确定它是如何工作的。