Почему мой скрытый процесс все еще виден?

Я печатаю документ, создавая объект 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();

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

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


person Chris B    schedule 11.02.2009    source источник


Ответы (2)


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

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

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

person Nir    schedule 11.02.2009

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

Вот статья Microsoft об автоматизации офиса.

person Dave Swersky    schedule 11.02.2009