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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#winform 关于调用外部程序的问题相关的知识,希望对你有一定的参考价值。

运行主程序的时候,可以打开一个外部程序,由于是第一次打开这个外部程序,所以启动时间大概需要10秒!假设已经启动过一次这个外部程序后,那么再去打开这个外部程序就仅仅需要3秒(关机后失效)!为了使用户能一开始以三秒的时间来打开外部程序,所以要做下优化:之前想到的办法是在主程序启动的时候调用这个外部程序,然后用一个11秒的定时器来关闭这个外部程序!可行,但是当第二次打开软件的时候,那个外部程序依然会显现在桌面上,即使将它最小话,但是还是有7秒的时间断内被用户知道!现在头都快抓破了,还是没想到好的方法!谷哥给出了一个方法就是把这个外部程序做成一个服务,开机运行一次后就关闭,理论上是可行的,可惜小弟技术不到家,不知道有没有哪位大神可以给出个解决方案,思路也行!谢谢了!!

你打开那个外部程序做什么。不知道你要完成什么功能,不好提供更可行的解决方案啊。

    一般关机后系统的临时文件会被清空,看看能否从这个来解决,比如打开程序时在系统临时文件夹下面生成一个文件(如果已经有了的话就证明不是第一次调用);

    开机自动启动程序,自动启动时给参数,其它时候用户运行程序不给参数;

    先不写了,下班回家。

追问

恩恩真心感谢你的思路,原本我是把程序自身的启动与关闭作为一个值写进程序目录里一个文件,然后再去读这个值,但是由于不能判断使用者是否有关机,最后这个方案才告吹的。如果按你说,把生成的文件放在系统临时文件夹,那问题可能就容易解决多了,我先去试下,看有没有可能实现这种想法!谢谢了!哎,兄弟,上网找了下资料,发现电脑关机并不会自动删除硬盘里面任何的文件(第三方软件或者手动设置除外),只会清空内存!

参考技术A 把外部程序做成一个服务? 也许是我孤陋寡闻,这应该不太可能。

然而用C#写一个属于自己的服务,是可以的。在系统启动的时候,用这个服务,去启动这个外部程序,当外部程序完全启动之后,再利用这个服务去关闭这个外部程序。系统启动一般都需要几十秒钟,足够你做这些事情了。外部程序不要过快去关闭它(比如你在第11秒就去关闭它了),这样不太好,因为,外部软件可能还没有真正完全启动并初始化,那样,你第二次打开时,它依然会很慢。追问

大哥,如果用C#写一个属于自己程序的服务,那么该怎么做呢?有没有好的网站介绍下?谢谢了!

参考技术B

可以区分一下是软件自动打开这个外部程序还是由人调用打开的这个外部程序,如果是软件打开的就不显示外部程序的窗口

process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

试试这样可不可以

参考技术C 你不如直接设置两个程序,让那个程序自动启动,在写一个定时关闭他的程序,都开机后运行

关于MFC中调用外部程序

参考技术A 方法一,先调用CMD然后执行命令
ShellExecute(NULL,"open","cmd.exe",NULL,NULL,SW_SHOWNORMAL);
指定为桌面的代码也给你了
ShellExecute(NULL,"open","cmd.exe",NULL,"C://Documents
and
Settings//****//桌面",SW_SHOWNORMAL);
方法二,直接调用程序
ShellExecute(NULL,"open","c://Documents
and
Settings//****//桌面//daycount.exe",NULL,NULL,SW_SHOWNORMAL);
*****是我的计算机名,不好意思隐藏了~

以上是关于C#winform 关于调用外部程序的问题的主要内容,如果未能解决你的问题,请参考以下文章

C#winform调用外部自己写的一个控制台程序,每次都是一闪而过,根本不执行代码。控制台args[0]是传入参数

winform process.start() 调用外部EXE引用程序, 如何实现用户登录

关于MFC中调用外部程序

外部修改C#Winform程序配置文件后Winform程序通过ConfigurationManager.AppSettings.Get方法读取没有变化

C# winform Win7 C盘读写文件 没有权限

c#winform 关于页面大小与控件大小的问题