首页 新闻 会员 周边 捐助

C#如何关闭一个进程再重启

0
悬赏园豆:20 [已解决问题] 解决于 2018-03-01 11:14

RT,想要做一个脚本文件,可以做到重启正在运行的应用程序。试过通过名称获取机器上的所有进程,但是只能kill这个进程,如果要重新打开要通过应用程序的所在路径,感觉这样用起来不方便。有没有大神可以赐教。。。

凌晨4time的主页 凌晨4time | 初学一级 | 园豆:140
提问于:2018-02-28 00:00
< >
分享
最佳答案
0

System.Diagnostics.Process 查找进程

MainModule.FileName 进程的属性,即进程的exe路径

注意32位和64位程序好像有点不同

收获园豆:15
日暮青色 | 菜鸟二级 |园豆:495 | 2018-02-28 09:48

MainModule.FileName是64位的,32位的进程访问不了

凌晨4time | 园豆:140 (初学一级) | 2018-02-28 10:07

@凌晨4time: 记得是有这个问题,没深究windows的机制,不确定重定向行不行。

不行就绕开嘛,用64位的进程访问不就行了:

自己的主进程(32)->启动自己的子进程(64)->查询

主进程与子进程用命名管道通讯不就完了,wcf包装的挺好。

日暮青色 | 园豆:495 (菜鸟二级) | 2018-02-28 10:34

@凌晨4time: https://stackoverflow.com/questions/9501771/how-to-avoid-a-win32-exception-when-accessing-process-mainmodule-filename-in-c

这个呢?我没试过

日暮青色 | 园豆:495 (菜鸟二级) | 2018-02-28 10:36

@日暮青色:主要是因为权限的问题。你给的链接提出的解决方案可以获得64位进程的名称而不是路径。我用了System.IO.Path.Combine(),可以获得路径但是感觉是一个比价笨的办法。

还是谢谢帮忙了

凌晨4time | 园豆:140 (初学一级) | 2018-03-01 11:13

@凌晨4time: 那最好的方法还是多进程(32、64)查询,结合进程通讯做呗。

日暮青色 | 园豆:495 (菜鸟二级) | 2018-03-01 11:55
其他回答(2)
0

类似这种 wmic process where caption="360se.exe" get caption,commandline /value

使用wmic可以获取进程的完整行,直接启动就行

收获园豆:5
2012 | 园豆:21645 (高人七级) | 2018-02-28 08:41

wmic可以关闭进程,但是关闭后进程中就没有这个应用程序的信息了,怎么开启?

支持(0) 反对(0) 凌晨4time | 园豆:140 (初学一级) | 2018-02-28 10:06
0

 你不想 用路径 那么先设置环境变量就行了。

set

kill

start(or programName)

花飘水流兮 | 园豆:13617 (专家六级) | 2018-02-28 11:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册