C# Windows服务 可否自动调用指定EXE 执行相关操作?
本帖最后由 linq_ 于 2011-02-14 15:55:09 编辑
假设我有一个已写好的EXE (名称 A.EXE)
此EXE的功能是对指定目录(C:\Test)内的图片进行一系列的处理 最后上传到某数据库内 [此部分已实现]
现我想写一WINDOWS服务 监听此目录
当此目录内有新图片添加时
WINDOWS服务便调用A.EXE 处理此新加的图片
不知此需求用C# 可否实现?
若可实现 可有相关示例或BLOG文章么?
------解决方案--------------------调用当然可以了在a程序中加上一个命令行参数,作为执行命令,服务程序直接启动a.exe并传入参数,告诉他要干什么就行了
------解决方案--------------------可以了
为什么不再服务中用定时器(或线程)做处理?
------解决方案--------------------问题是你的A.EXE是如何设计的,这个不清楚,那个就不知道能不能调用。
如果一定要部署问独立的程序,然后又要集成到其它EXE中,这个叫做MEF。在.net框架中已经有MEF架构。
------解决方案--------------------不要这么麻烦,调用来调用去的,监听和处理全部写在A.EXE里面不更好么? 还省了一步调用A.EXE的过程。
------解决方案--------------------exe
是你自己写的吗?是的话功能都写到服务里可以吗
------解决方案--------------------
如果是.net平台的程序,那么可以考虑MEF方式来架构它。大致只需要用10分钟修改一下就行了。
MEF就好比如Word里边可以嵌入Excel、Excel里边可以嵌入Powerpoint,可以让你独立发布的不同系统相互作为插件而自动(但是是动态而非静态编译)地相互调用。
比如不同公司的产品,它们商量一个简单的只有一两个功能的接口,然后各自在自己的产品里包含这个接口,那么不同公司的产品就能在运行时(只要知道对方产品的安装目录)作为对方产品的内部组件一样被使用。
当然30年前的程序也可以调用其他的程序。但是MEF是战略意义的,所以它才显得操作方便和非常必要。
------解决方案--------------------若人工自己操作的时候,在你的a.exe中,用户需不需要做什么操作(比如点一个按钮,或者选定某个需要上传的文件),才能上传,还是说只需要双击a.exe就可以完成一切了。
如果是后者的话,你在windows service中用FileSystemWatcher监听文件夹,然后又变化就new一个Process调用你的a.exe就行了。
------解决方案--------------------windows services可监控文件夹
timer定时查询
service属性中 选中 允许与桌面交互
设置c#windows服务描述及允许服务与桌面交互的几种方法
http://blog.csdn.net/jiangxinyu/archive/2010/03/19/5397060.aspx
监控http://www.cnblogs.com/wuhuacong/archive/2010/08/09/1795725.html
------解决方案--------------------