怎么避免2个进程操作同一个word文件,解决后另开贴送分
我的打印.doc文件的问题解决了,用到了一个打印类(后面我会附上代码),谢谢以上大家的帮助,现在又有新的问题了:我现在的情况是我可以在我的程序理显示.doc文件,当我想打印的时候,我的代码是这样的,取得当前显示的.doc文件的路径,然后用打印类打印出来,问题出在当我显示.doc文件的时候,系统已经开启了一个word进程,如果我用这个打印类来打印此.doc文件,这个类会另外再打开一个word进程(这个可以通过windows任务管理器看到),如果对微软word了解的人都知道,word文件可以共享多人浏览,为了防止多人修改,word的安全措施允许多个进程打开同一个.doc文件的时候只有第一个才有修改权限,其余的只有浏览权限,所以这个时候会有一个对话框弹出,来说明此文件已经被前面的用户进程打开(我不知道怎么去除这个对话框);
如果打印成功,当关闭应为打印而打开的word进程的时候,应为是在本机操作word,这两个进程同时操作了一个word后台文件,所以当第二个进程打算关闭这个后台文件的时候,第一个进程又不允许它关,因此又会出现保存后台文件的对话框(恼火),这个打印一个当前显示的.doc文件竟然出现了这么大的麻烦,真不知道微软打印它的word文件是怎么实现的,大家有没有什么好的想法拉兄弟一把
附上打印类代码:
public class Printing //打印当前程序所在路经的ti.doc文件的打印类
{
public Printing()
{
}
public bool Bln_PrintAllFiles(string StrFileName)
{
Word.Application ObjWord =new Word.Application(); //Create Word Application
//wd = new Word.ApplicationClass() 类
//ObjWord =new Word.Application() 接口
object M=Type.Missing; //M is missing...hi..hi
object V= StrFileName; //Convert to Object..
object I=false; //Convert to Object
try
{
if(StrFileName.EndsWith(".doc")) //Ends with .doc. itz Word document....
{
ObjWord.Documents.Open(ref V,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M);
ObjWord.PrintOut(ref I,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M,ref M);
ObjWord.Quit(ref M,ref M,ref M);
return true;
}
else //for all other types..I did check for .txt,.pdf and .Msg
{
System.Diagnostics.Process P=new Process(); //Create a process
P.StartInfo.FileName = StrFileName.ToString(); //convert ....> Readable
P.StartInfo.CreateNoWindow = true; //Perfect...Create No Window
P.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//WindowStyle-HIDDEN
P.StartInfo.Verb = "print";
P.Start(); //Start the process
P.Dispose();
ObjWord.Quit(ref M,ref M,ref M);
return true;
}
}
catch(Exception ee) //Err Handler.....
{
ObjWord.Quit(ref M,ref M,ref M);
MessageBox.Show(ee.Message);
return false;
}
}
}
}