有关C#winform的调用外部程序的问题

主程序启动的时候会调用一个外部程序,这个外部程序的界面会显示在主程序界面的前面,我的本意是不希望让用户知道调用了这个程序,大家有什么好方法么?先谢谢各位的指教了!参照了网上的一些方法,首先将主程序窗口一直置于最前面,看过几个列子试了下都不行!
由于这个外部程序需要十秒左右的启动时间,所以会导psi.WindowStyle = ProcessWindowStyle.Hidden无法运行最后我只能把这个外部程序改成最小化 psi.WindowStyle = ProcessWindowStyle.Minimized;而使这个外部程序从一开始运行就最小化,而不会遮挡主程序(不让用户知道已启动)!其实我真正的意图是这样子:我的主程序中可以打开这个外部程序,在不关机的情况下,如果这个外部程序被启动过(整个外部程序初始化一遍),那么再次启动这个程序的话仅需要三秒时间而不是原来的十秒!

以隐藏方式启动这个外部程序就行了,比如

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "NOTEPAD.EXE";
psi.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(psi);

追问

首先真心感谢你的回答。其实之前我也是用这种方法的,但是可能是我自身的问题,而使这段代码无法执行,以下有几个疑惑点;首先是外部程序EXE的路径问题,你把笔记本程序换成QQ。exe一样能运行么?虽然这个外部程序是装在主程序目录中的,但是你怎么知道用户会把这个主程序装在那个盘中?因此这代码第二句就一直无法执行,后面的就更无从说起了!

追答

你当然必须知道这个exe所在位置,有两种,一种是绝对路径,也就是说比如你明确知道它是c:\sample\1.exe这类,或者是相对的,也就是相对于你的主程序的exe所在位置,比如是exe所在目录的sample下,那可能就是Application.StartupPath+@"\sample\1.exe",如果说你根本就不知道这个exe在哪(而且这个exe也不会在注册表中记录位置),那就只能用遍历文件夹的方式来查找这个文件的位置了。

追问

确实是,只要有相对路径就行了。不过最关键的是第三句代码效果出不来!这是最郁闷的地方,因为经过调试确实是psi.WindowStyle=hidden;可是程序依然弹出来,想不明白为什么会这样,大哥,你还有其他什么办法么?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-20
最小化外部程序呢追问

问题是如何在其一出现就能使其最小化?

追答

ProcessStartInfo psi = new ProcessStartInfo();psi.FileName = "NOTEPAD.EXE";psi.WindowStyle = ProcessWindowStyle.Hidden;Process.Start(psi);
这个路径应该是你自己配置的吧,不然怎么知道执行那个程序呢,还有你不想卡住就用多线程

第2个回答  2020-01-02
你所说的【其他程序】也是你编写的话,在【其他程序】中引用该winform程序所属的【项目】,这样就可以在【其他程序】中使用你这个winform程序的窗体类了,注意把你想共享的窗体类的访问级别设为public
相似回答