Почему мой скрытый процесс все еще виден? - PullRequest
1 голос
/ 11 февраля 2009

Я печатаю документ, создавая объект System.Diagnostics.Process, затем установив для глагола StartInfo значение «печать», а затем вызываю метод Start() процесса.

Я хочу, чтобы этот процесс печати был скрыт, поэтому я устанавливаю CreateNoWindow = true и WindowStyle = ProcessWindowStyle.Hidden. Но приложение (Word или Acrobat) по-прежнему отображается во время печати. ​​

Я знаю, что скрытые настройки процесса игнорируются, если для процесса заданы имя пользователя или пароль, и я отлаживал и проверял, что они пусты. Я даже пытался явно установить их в NULL, но безрезультатно.

Мне интересно, заставляет ли приложение работать приложение так, как будто оно требует вмешательства пользователя (Word отображает диалоговое окно «печать документа ...»), которое отменяет настройки, чтобы скрыть его.

Я использую .Net 2.0, C #, Word 2007 и Windows Vista.

Мой действительный код выглядит следующим образом:

System.Diagnostics.Process shellProcess = new System.Diagnostics.Process();
shellProcess.StartInfo.FileName = fullFileName;                   
shellProcess.StartInfo.CreateNoWindow = true;
shellProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
shellProcess.StartInfo.Verb = "print";
shellProcess.Start();

Помощь очень ценится ...

Обратите внимание, что я знаю, что могу использовать API Word или Acrobat для достижения той же цели, но этот вопрос конкретно касается видимости процесса оболочки.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2009

StartInfo.WindowStyle передается приложению, и приложение может делать с ним все, что захочет (оно может использовать его или игнорировать).

И я не уверен, но я думаю, что CreateNoWindow применяется только к консольным приложениям.

Как только процесс запущен, вы не можете его контролировать, и этот процесс может отображать любой пользовательский интерфейс, который вам нужен, лучше всего использовать конкретную опцию программы (для автоматизации использования Office, как предложил Дейв, я не знаю, об Акробате).

1 голос
/ 11 февраля 2009

Если вы хотите распечатать документ Word без Word, фактически отображаемого в окне, вам следует вместо этого использовать Office Automation. Microsoft делает сборки Office Automation доступными (я думаю, что они устанавливаются вместе с Office по умолчанию.) Здесь - статья о том, как это сделать. Я на самом деле не пробовал код, но я немного автоматизировал его, и после прочтения он выглядит хорошо.

Здесь - статья от Microsoft по автоматизации Office.

...