首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#使用Process打印导致的有关问题

2013-11-18 
C#使用Process打印导致的问题我现在准备使用默认打印机打印WORD文档,但是在实际环境中使用反映说一旦打印

C#使用Process打印导致的问题
我现在准备使用默认打印机打印WORD文档,但是在实际环境中使用反映说一旦打印卡死,会导致后面的操作无法进行
这是我自己写的一段测试打印的代码,打印部分大致与实际相同


string filename = @"C:\test.docx";

pro = new System.Diagnostics.Process();
pro.StartInfo.CreateNoWindow = true;
pro.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
pro.StartInfo.UseShellExecute = true;
pro.StartInfo.FileName = filename;
pro.StartInfo.Verb = "print";
pro.Start();
MessageBox.Show("");//测试用的提示语句

在本地计算机测试时(默认的是xps打印),Word会正常打开,弹出xps保存的对话框,保存或者取消后才弹出提示框
这说明,pro.Start()确实包含了整个打印过程,等到打印结束才会进行下一步MessageBox.Show("")

由于不知道是什么原因导致打印过程卡死,目前只有结束进程,但是在任务管理器中还是能看到WINWORD(用Process打印过程中打开的),如果卡死N次,就会有N个WINWORD进程。所以现在要想办法把这个问题解决掉这个问题,要把启动的WINWORD给杀掉


    public partial class Form1 : Form
    {
        System.Diagnostics.Process pro;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Print();
        }


        private void Print()
        {
            Thread t = new Thread(delegate()
            {

                string filename = @"C:\test.docx";

                pro = new System.Diagnostics.Process();
                pro.StartInfo.CreateNoWindow = true;
                pro.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                pro.StartInfo.UseShellExecute = true;
                pro.StartInfo.FileName = filename;
                pro.StartInfo.Verb = "print";
                pro.Start();
                MessageBox.Show("");
            });

            t.IsBackground = true;
            t.Start();
            

        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (pro != null)
            {
                pro.Kill();
                pro = null;
            }
        }
    }


操作时先点Button1,再点Button2,但是在 pro.Kill()时,报了一个System.InvalidOperationException{"没有与此对象关联的进程。"}
问:我要怎样才能停止pro,并把pro中启动的WINWORD给关闭(不能用查询WINWORD进程并杀掉,万一用户正在使用的WINWORD被误关) Process C#
[解决办法]
foreach (Process p in Process.GetProcesses())
    {
            using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + p.Id))
            {
                foreach (ManagementObject @object in searcher.Get())
                {


                    if((@object["CommandLine"].ToString().Index("test.docx")>=0) p.Kill();
                }

            }
    }
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

热点排行