社区
进程/线程/DLL
帖子详情
如何实现两个exe的通信?
pengys
2008-05-06 06:09:28
在A.exe中调用B.exe打开文件a.txt进行浏览,A.exe中实现删除a.txt文件的功能,要删除a.txt需要知道该文件没有被B.exe打开,也就是说当B.exe关闭的时候,才能执行A.exe中删除文件功能.如何实现请高手指教.
...全文
320
20
打赏
收藏
如何实现两个exe的通信?
在A.exe中调用B.exe打开文件a.txt进行浏览,A.exe中实现删除a.txt文件的功能,要删除a.txt需要知道该文件没有被B.exe打开,也就是说当B.exe关闭的时候,才能执行A.exe中删除文件功能.如何实现请高手指教.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pengys
2008-05-09
打赏
举报
回复
感谢大家,尤其是icansaymyabc学习与进步,通过他的提醒,改写b.exe的代码,增加一个是否要删除文件的参数实现的.
icansaymyabc
2008-05-08
打赏
举报
回复
[Quote=引用 15 楼 pengys 的回复:]
b.exe的源码虽然可以修改,但是按你的逻辑是应用程序打开文件,浏览后关闭文件就删除原文件,这个合乎逻辑吗?
你用记事本打开一个文件,这个文件就被记事本删除了,你能接受吗?
[/Quote]
你咋这么想不明白呢?记事本不是我开发的也不是我的任何应用的组件之一,我当然不能让他把我的文件删除。
可是你的 a 和 b 本来就是一个整体,共同完成你规定的任务。
目前你有一个需求,就是看过文件就删,这个任务交给 b 来做是无比轻松,而交给 a 来做却是困难重重。你偏偏就是要指定 a 来做,决不让 b 来做,不知道你这是合乎什么逻辑!
谈到逻辑,b 作为这个应用的组件之一,完成这个应用所需的功能,这不合逻辑吗? 如果你需要有的文件删掉、有的文件保留,一切要 a 来决定,你可以再改写 b 的代码,增加一个是否要删除文件的参数,这不合逻辑吗?
归根结底还是你的运筹学没学好
harry_qj
2008-05-08
打赏
举报
回复
发送消息也可以吧
fly_wawe
2008-05-08
打赏
举报
回复
可以另外设置一个标识量,当B.EXE关闭后,写入TRUE
A.EXE删除时,先检测该标识量,为TRUE就删,不为TRUE,则。。。
cnzdgs
2008-05-08
打赏
举报
回复
[Quote=引用 14 楼 pengys 的回复:]
引用 11 楼 cnzdgs 的回复:
既然这样,你在B.exe打开文件时不要设置共享删除标志就可以了,这样在文件没有关闭之前是删除不掉的,A.exe可以循环删除这个文件,如果删除成功则结束循环,否则Sleep一下再执行删除,如果不想阻塞线程可以用SetTimer来定时执行删除,删除成功后取消定时。此外也可以利用命名事件由B来通知A。
不能阻塞线程,用定时器也感觉不太好.
[/Quote]
那就用消息或者命名对象来通知。
pengys
2008-05-08
打赏
举报
回复
[Quote=引用 13 楼 icansaymyabc 的回复:]
引用 9 楼 pengys 的回复:
1.B.exe的源代码可以修改
2.必须等到B.exe所打开的文件关闭后,删除文件
你干吗不改写 b.exe, 让他关闭文件后立即删除之, 非得让 a.exe 来干删除文件这事?
你这是运筹学没学好,不会合理统筹安排任务。
[/Quote]
我运筹学刚刚及格呵呵!
b.exe的源码虽然可以修改,但是按你的逻辑是应用程序打开文件,浏览后关闭文件就删除原文件,这个合乎逻辑吗?
你用记事本打开一个文件,这个文件就被记事本删除了,你能接受吗?
pengys
2008-05-08
打赏
举报
回复
[Quote=引用 11 楼 cnzdgs 的回复:]
既然这样,你在B.exe打开文件时不要设置共享删除标志就可以了,这样在文件没有关闭之前是删除不掉的,A.exe可以循环删除这个文件,如果删除成功则结束循环,否则Sleep一下再执行删除,如果不想阻塞线程可以用SetTimer来定时执行删除,删除成功后取消定时。此外也可以利用命名事件由B来通知A。
[/Quote]
不能阻塞线程,用定时器也感觉不太好.
pengys
2008-05-07
打赏
举报
回复
1.B.exe的源代码可以修改
2.必须等到B.exe所打开的文件关闭后,删除文件
acinonyx
2008-05-07
打赏
举报
回复
共享内存、消息队列也可以。
cnzdgs
2008-05-07
打赏
举报
回复
请LZ先回答两个问题:
1、B.exe的源代码能不能修改?
2、你的需求只是删除文件还是必须要等到B.exe退出后才删除文件?
pengys
2008-05-07
打赏
举报
回复
B.exe是个COM,通过ocx浏览文件的,A.exe不是通过CreateProcess或者ShellExecuteEx来加载B.exe的.
icansaymyabc
2008-05-07
打赏
举报
回复
[Quote=引用 9 楼 pengys 的回复:]
1.B.exe的源代码可以修改
2.必须等到B.exe所打开的文件关闭后,删除文件
[/Quote]
你干吗不改写 b.exe, 让他关闭文件后立即删除之, 非得让 a.exe 来干删除文件这事?
你这是运筹学没学好,不会合理统筹安排任务。
icansaymyabc
2008-05-07
打赏
举报
回复
没必要像你想的那样复杂,你在A.exe中调用 notepad.exe 打开文件a.txt进行浏览,A.exe可以立即删除a.txt,而不用管 notepad.exe 是否关闭。
cnzdgs
2008-05-07
打赏
举报
回复
既然这样,你在B.exe打开文件时不要设置共享删除标志就可以了,这样在文件没有关闭之前是删除不掉的,A.exe可以循环删除这个文件,如果删除成功则结束循环,否则Sleep一下再执行删除,如果不想阻塞线程可以用SetTimer来定时执行删除,删除成功后取消定时。此外也可以利用命名事件由B来通知A。
nooning
2008-05-07
打赏
举报
回复
方法很多,使用临界资源,信号量,FileMapping,管道,全局共享内存(DLL).....
jacklzw88
2008-05-06
打赏
举报
回复
event,信号量都可以用
eirssy
2008-05-06
打赏
举报
回复
是呀,先CreateProcess, 然后WaitForSingleObject(B进程句柄),最后删除A.txt
cnzdgs
2008-05-06
打赏
举报
回复
如果B.exe是你自己做的,只要打开文件的时候不指定共享删除标志即可,在文件未关闭的情况下是不能被删除的(DeleteFile失败)。
如果你想等B.exe退出再删除,可以通过CreateProcess或者ShellExecuteEx来加载B.exe,并保留B.exe的进程句柄,当要删除文件前,执行WaitForSingleObject等待进程结束。
pengys
2008-05-06
打赏
举报
回复
谢谢
an_bachelor
2008-05-06
打赏
举报
回复
就是一个进程间通信的问题 你可以用COM、命名管道、Socket等等任何一种方式来同步
使用Internet控件的简单Web浏览器
标签“网络
通信
类”表明这
两个
程序都是关于网络
通信
的,它们涉及到互联网访问和文件传输这两方面的网络活动。 在压缩包的文件名称列表中: - FTMAIN.DFM 和 FTMAIN.PAS:这是
两个
Delphi开发的组件文件,其中DFM文件...
在Windows上流畅投影演示Android 程序
通过在两台设备上分别安装这
两个
组件,用户可以
实现
在Windows上查看并控制Android设备的屏幕。 在Windows上安装客户端: 1. 下载 MirrorOp 接收器的安装程序,这通常是一个.
exe
文件。 2. 执行安装程序,按照提示...
redis-3.0.1-win64
首先,此版本引入了多线程I/O模型,虽然Redis主要依赖单线程执行命令,但在这个版本中,网络I/O部分已经
实现
异步处理,提高了网络
通信
效率,降低了CPU资源的占用。其次,3.0.1版修复了多个已知的bug,增强了系统的...
C#
两个
独立
exe
程序直接
通信
两个
独立的
exe
程序之间如何完成
通信
呢?首先想到的办法是利用生成文件的方法,即,发送端在某个目录下生成一个文件,包含要发送的消息,接收端从这个目录中读取文件且获取消息。这个方法也能
实现
通信
,但是总感觉...
C#
两个
exe
程序之间
通信
其实对于
两个
程序之间进行
通信
的
实现
方式有很多种,一般会采用服务端+客户端的模式,此处我们是进行
两个
客户端之间的
通信
,如果用一种最简单的方式去
实现
的话,我认为可以采用写文件的方式,即一个读,...
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章