2010-06-04 66 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的程序,它允許永久性地爲可執行文件設置處理器關聯性,但我不確定它是如何工作的。