首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

大家都来帮忙!怎么实现这样的功能

2013-12-04 
大家都来帮忙!如何实现这样的功能?我有两个程序A.exe,程序B.exe如何实现 启动时:只有在A.exe执行成功时调

大家都来帮忙!如何实现这样的功能?
我有两个程序A.exe,程序B.exe
如何实现 
启动时:只有在A.exe执行成功时调用程序B.exe(不能单独执行程序B.exe)
退出时:只有在B.exe退出后才能退出程序A.exe(不能强行结束掉程序A.exe)
A程序与B程序还会经常交互(如:B操作成功成功或失败时,A会显示出来)
'----------------
曾经听说过这样的功能(DDE?不能确定).
希望能帖出关键代码和注意事项即可.
由于权限有限,只能上100分,如需加分可开贴追加.鞠躬! 功能
[解决办法]
启动时:只有在A.exe执行成功时调用程序B.exe(不能单独执行程序B.exe)
可以靠全局互斥量或者传参数实现。DDE就不要用了。

退出时:只有在B.exe退出后才能退出程序A.exe(不能强行结束掉程序A.exe)
可以实现退出A的时候强制退出B,但是不能实现只有B退出才能退出A。
可以这么说,在任何情况下,都不可能做到一个进程不允许关闭。当然这其中包括了你说的因为另一个进程运行所以不允许关闭的情况。
[解决办法]
启动时:只有在A.exe执行成功时调用程序B.exe(不能单独执行程序B.exe)
  在A.exe中,用 Shell( )来启动B.exe,并在命令行中传递特定的标志参数。B.exe在启动时,先检查命令行参数,发现
不符合要求,就直接结束。为了“更加可靠”,可以在上一步的验证通过之后,进行“通讯”再次进行身份验证(比如传递
一些“秘密对话”,反正你这个也有想到通讯的需求,在这儿也顺便用上它),这步的验证通过之后,B.exe才继续运行,否
则B.exe就结束。

退出时:只有在B.exe退出后才能退出程序A.exe(不能强行结束掉程序A.exe)
  A.exe在用 Shell( )启动B.exe之后,对B.exe的进程进行监视(循环检查、或者用API: CreateProcess()和
WaitForSingleObject())。我常用的方法是循环检查,用API: OpenProcess()和GetExitCodeProcess(),以及Sleep()。

A程序与B程序还会经常交互(如:B操作成功成功或失败时,A会显示出来)
  “交互”除了DDE之外,还可以用 SendMessage( )或PostMessage( ),当然要用消息来“通讯”,就必须要进行HOOK了。
如果要传递大量的文本内容(或其它的大量数据),就通过全局内存(以 Global 开头的几个API)或内存映射文件传递。

[解决办法]
退出时:只有在B.exe退出后才能退出程序A.exe(不能强行结束掉程序A.exe)
这个4F还少说了一些: A.exe在用 Shell( )启动B.exe之后,对B.exe的进程进行监视。当B.exe结束之后,A.exe才进行下
一步的操作。在关闭A.exe时,如果B.exe还在运行中,A.exe不退出就行了(可以给个消息提示)。当然你的“不能强行结束
掉程序A.exe”应该不包括 用任务管理器或别的第三方工具来强制结束进程的情况,要做到这种情况下也“不被结束”,那不是
一般的功能可及……


[解决办法]
楼主说DDE没有错. 
那是因为A作为DDE HOST, B作为DDE CLIENT, 单独运行B的话就会无法连接报错. 只能先运行A再运行B, 至于如何让它们按顺序打开, 直接在A里面用SHELL打开B即可.

但是推而广之, 其他只要有服务端和客户端的程序都是这样的. 不管客户端是否会因为服务端有否打开而报错, 它连不上服务端总归是无法实现完整功能的.

热点排行