为什么隐藏的过程仍然可见?

时间:2009-02-11 16:56:28

标签: c# process printing hidden visible

我正在打印文档,方法是创建一个System.Diagnostics.Process对象,然后将StartInfo动词设置为“print”,然后调用进程Start()方法。

我希望隐藏此打印过程,因此我设置了CreateNoWindow = trueWindowStyle = 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来实现同样的目的,但这个问题具体是关于shell进程的可见性。

2 个答案:

答案 0 :(得分:2)

将StartInfo.WindowStyle传递给应用程序,应用程序可以随意使用它(它可以使用它或忽略它)。

我不确定,但我认为CreateNoWindow仅适用于控制台应用程序。

一旦进程启动,你无法控制它,并且该进程可以显示它想要的任何UI,你最好的选择是使用特定的程序选项(对于像Dave建议的Office使用自动化,我不知道关于Acrobat)。

答案 1 :(得分:1)

如果要打印Word文档而不将Word实际显示在窗口中,则需要使用Office Automation。 Microsoft使Office Automation程序集可用(我认为默认情况下它们随Office一起安装。)Here是一篇关于如何执行此操作的文章。我实际上没有尝试过代码,但我已经做了一些自动化,从快速阅读看起来很不错。

Here是微软在Office Automation上发表的一篇文章。