C# &引用;启动/亲缘关系“;在.NET中等效

C# &引用;启动/亲缘关系“;在.NET中等效,c#,.net,windows,multithreading,winapi,C#,.net,Windows,Multithreading,Winapi,startwindowsshell命令(在cmd.exe中)似乎能够启动具有所选处理器相关性的进程,而不是启动进程,然后在启动后的一段时间内设置所选处理器相关性 start /affinity 2 something.exe 有没有一种方法可以在.NET应用程序中使用p-Invoke或不使用p-Invoke执行相同的操作?调用cmd.exe/C start…不起作用 Process类具有ProcessorAffinity属性,但是如果在调用Start方法之前尝试设置它,它会抛出invalido

start
windowsshell命令(在cmd.exe中)似乎能够启动具有所选处理器相关性的进程,而不是启动进程,然后在启动后的一段时间内设置所选处理器相关性

start /affinity 2 something.exe
有没有一种方法可以在.NET应用程序中使用p-Invoke或不使用p-Invoke执行相同的操作?调用
cmd.exe/C start…
不起作用


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

我怀疑Start命令在这种情况下的作用是启动挂起的进程(即调用时通过
CREATE_SUSPENDED
),然后设置处理器关联,然后恢复线程


这样,虽然进程在没有设置进程相关性的情况下存在,但在它开始执行时,处理器相关性已经设置好,因此它只在指定的处理器上运行。

我认为您不能在启动进程之前设置处理器相关性,因为的第一个参数是进程的句柄


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

你确定内部
start
不会启动进程,然后设置亲缘关系吗?@Andrey我们如何找出start在内部做了什么?我认为我的假设是错误的,看起来像Jerry Coff我知道secret@Andrey:注意我说的是“我怀疑”--我实际上还没有看过要检查的start命令的代码。无论如何,模仿它比知道如何让你的代码做你想做的事情要有趣得多。@Jerry Coffin你的假设对我来说比我的假设更可靠、更合理。顺便说一句,start不是一个程序,而是cmd的一部分,我认为,要推翻它并不容易那个