怎么避免2个进程操作同一个word文件,解决后另开贴送分

yangbc 2003-10-13 08:15:53
我的打印.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;

   }


  }

 }

}

...全文
164 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangbc 2003-10-14
  • 打赏
  • 举报
回复
微软office好像已经有这么个配置文件了,我的意思是在我的winform窗体中嵌入的word文件(.doc格式的,我用了一个word文件的显示组件)如果打印应该调用什么方法,我调用了interop.word.dll中application类的printout方法,就会另打开一个word进程来打印这个word文件,我的目的是直接在前面那个进程中打印word文件。大家有什么办法???????
yangbc 2003-10-14
  • 打赏
  • 举报
回复
问题解决了,在打开文件的后面加入打印代码是可以的,不过有点不尽人意的地方就是又重新打开一遍文件,没办法了,结贴吧
kuangren 2003-10-13
  • 打赏
  • 举报
回复
考虑下操作系统中的类似信号量的操作
binbin2000 2003-10-13
  • 打赏
  • 举报
回复
太多,没有细看,
避免两个进程同时操作一个文件的方法很容易,增加一个配置文件,当一个进程操作word文件时候,在配置文件里面写"true,操作完毕后,将true改为false。当另外一个进程要操作word文件的时候,先读取配置文件,然后确定是否操作word文件。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧