博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
net中System.Diagnostics.Process.Start用法
阅读量:6416 次
发布时间:2019-06-23

本文共 1867 字,大约阅读时间需要 6 分钟。

 

-----------------------------------------------------------------------------------------------------------------------------------

 

.NET 中 System.Diagnostics.Process 类应用中碰到的问题

 

自己开发的客户端程序需要从数据库的Image字段创建一个Word文档,然后调用Word程序打开,用户编辑并保存后再回存到数据库里。其中调用Word打开文档用的是System.Diagnostics.Process类,相关代码如下:
string
tempPath
=
System.Environment.GetEnvironmentVariable(
"
TEMP
"
);
string
fileName
=
Path.Combine ( tempPath,
"
01.doc
"
);
Process wordProcess
=
new
Process();
wordProcess.StartInfo.FileName
=
fileName;
wordProcess.StartInfo.Verb
=
"
edit
"
;
wordProcess.StartInfo.UseShellExecute
=
true
;
wordProcess.Start();
wordProcess.WaitForExit();
wordProcess.Close();
MessageBox.Show (
"
Word Exited!
"
);

前几天一直好用,但是今天在执行到 wordProcess.WaitForExit();这一句时发生意外,信息是“没有与此对象关联的进程”。仔细查看MSDN里的相关文档,也没有太详细的解释,只是在WaitForExit()方法的文档提到可能出现的意外中就包含了这个。突然想到有没有可能是因为Word进程已经打开,所以并不是和当前进程所关联的,所以会出现这个意外。关掉运行的其他Word进程以后,再执行果然就没有问题了。

经过一番研究,终于找到了有没有Word实例运行的情况下都能实现上一篇文章中的要求的方法,代码如下:

            
string
tempPath
=
System.Environment.GetEnvironmentVariable(
"
TEMP
"
);
            
string
fileName
=
Path.Combine ( tempPath,
"
推理01.doc
"
);
            
string
winwordPath
=
""
;
            
//
判断系统中是否已经有 Word 实例在运行。
             Process[] wordProcesses
=
Process.GetProcessesByName(
"
winword
"
);
            
foreach
( Process process
in
wordProcesses)
ExpandedBlockStart.gifContractedBlock.gif          
{
                 Debug.WriteLine( process.MainWindowTitle );
                 winwordPath
=
process.MainModule.FileName;        
//
如果有的话获得 Winword.exe 的完全限定名称。
                
break
;
             }
             Process wordProcess
=
new
Process();
            
if
( winwordPath.Length
>
0
)    
//
如果有 Word 实例在运行,使用 /w 参数来强制启动新实例,并将文件名作为参数传递。
ExpandedBlockStart.gifContractedBlock.gif
          
{
                 wordProcess.StartInfo.FileName
=
winwordPath;
                 wordProcess.StartInfo.UseShellExecute
=
false
;
                 wordProcess.StartInfo.Arguments
=
fileName
+
"
/w
"
;
             }
            
else
                            
//
如果没有 Word 实例在运行,还是
ExpandedBlockStart.gifContractedBlock.gif
         
{
                 wordProcess.StartInfo.FileName
=
fileName;
                 wordProcess.StartInfo.UseShellExecute
=
true
;
             }
             wordProcess.Start();
             wordProcess.WaitForExit();        
//
当前进程一直在等待,直到该 Word 实例退出。
             wordProcess.Close();
你可能感兴趣的文章
redis 的两种持久化策略及原理
查看>>
mysql树查询,sql递归函数
查看>>
互联网中所说的“旁注”是什么?
查看>>
角斗士(Blokus)软件pentobi在OSX的编译过程
查看>>
如何在内容页中添加淘宝商品价格和商品地址的字段
查看>>
Rsync的配置与使用
查看>>
java.lang.UnsatisfiedLinkError: Couldn't load TestJni from loader dalvik.system.PathClassLoader[De
查看>>
这个不错
查看>>
阿里帝国-蓄势待发
查看>>
【2016-03-26】《修改代码的艺术》:Sprout & Wrap
查看>>
Linux命令:MySQL系列之十二--MySQL备份与还原mysqldump(重要章节)
查看>>
OpenStack Summit 2012 视频
查看>>
static和const关键字的作用
查看>>
go 读取文件
查看>>
C++标准模板库-STL库迭代器
查看>>
阿里云ECS安装 CoreOS
查看>>
LAMP(php动态扩展模块,httpd的rewrite,php错误日志,php.ini配置详解)
查看>>
下单订单绑定订单号业务场景理解后端接口的幂等性
查看>>
C/C++和Lua是如何进行通信的?
查看>>
calico与flannel对比
查看>>