Process.Start и разпределени ресурси

Имам тази част от кода:

Process pLight = new Process();
pLight.StartInfo.UseShellExecute = false;
pLight.StartInfo.FileName = "MyCommand.exe";
//
pLight.StartInfo.Arguments = "-myparam 0";
pLight.Start();
//
pLight.StartInfo.Arguments = "-myparam 1";
pLight.Start();
//
pLight.StartInfo.Arguments = "-myparam 2";
pLight.Start();

Въпросът е: нов процес се "създава" всеки път, когато извиквам Start()?

От документацията на Process.Start:

Връща true, ако е стартиран ресурс на процес; false, ако не е стартиран нов ресурс на процес (например, ако съществуващ процес се използва повторно).

но всеки път, когато извиквам този метод, получавам true. И така, как мога да използвам повторно същия процес? Има ли начин да стартирате множество команди, използвайки един и същ процес?


person davioooh    schedule 04.06.2012    source източник


Отговори (2)


pLightStartInfo = new ProcessStartInfo();
pLightStartInfo.UseShellExecute = false;
pLightStartInfo.FileName = "MyCommand.exe";
pLightStartInfo.Arguments = "-myparam 0";
pLightStart();
pLightStartInfo.Arguments = "-myparam 1";
pLightStart();
pLightStartInfo.Arguments = "-myparam 2";

Process pLight = new Process(pLightStartInfo); // first time so a new Process will be started

Process myOtherProcess = Process.Start(pLightStartInfo); // second time so myOtherProcess would reuse pLight, given original hadn't closed so both would be "pointing" at one MyCommand.exe

Аз никога не съм го правил, но изглежда това означава.

person Tony Hopkinson    schedule 04.06.2012
comment
Не съм сигурен за това, (равенство срещу еквивалентност) Един и същ идентификатор на процес / манипулатор нещо би било това, което бих търсил. - person Tony Hopkinson; 04.06.2012
comment
Този отговор е само спекулация и всъщност не работи (дори след необходимите корекции). Ако pLight беше „използван повторно“ по някакъв начин, тогава според документацията myOtherProcess ще бъде нула. Не е. - person fractor; 11.12.2014

Ако прочетох това правилно, всичко, което трябва да направите, е да създадете нов екземпляр на ProcessStartInfo и след това, ако има работещ Process, той го използва повторно.

Използвайте това претоварване, за да стартирате ресурс на процес, като посочите екземпляр ProcessStartInfo. Претоварването свързва ресурса с нов компонент на процеса. Ако процесът вече се изпълнява, не се стартира допълнителен ресурс на процеса. Вместо това съществуващият процесен ресурс се използва повторно и не се създава нов процесен компонент. В такъв случай, вместо да върне нов компонент Process, Start връща null на извикващата процедура.

http://msdn.microsoft.com/en-us/library/0w4h05yb.aspx (Първи ред под забележки)

person Adam Sweeney    schedule 04.06.2012