4

简而言之,应用程序从数据库中查找要做某事的指令,执行操作,并将有关该操作成功或失败的信息保存回数据库。它执行大约 40 种不同的操作,例如自动化 Office 应用程序、复制文件、运行搜索等。

该应用程序是一个单独的 EXE,因此所有内容都在主应用程序的进程空间中运行,这一直是不稳定的主要来源,因为它必须加载大量的第 3 方 DLL 才能完成工作,而且它们经常会做一些令人讨厌的事情,导致崩溃整个应用程序。

计划:我想将执行危险繁重工作的代码从 VB6 exe 移到独立于主应用程序运行的外部进程中。原始应用程序只会处理数据库内容并启动其他进程来进行投标。

做这个的最好方式是什么?如果我还在 VB6 中,我想我会构建 ActiveX EXE 来执行此操作,但我不确定 .Net 等价物是什么。理想情况下,VB6 应用程序会声明一个实例化外部进程的对象,并使用对象设置参数的方法,执行进程,可能接收进度通知,最后接收操作结果。

解决此问题的最佳方法是什么?

谢谢!!

4

2 回答 2

0

嗯,不能说我以前尝试过这样的事情,但是

一种可能的解决方案

  1. 编写一个应用程序\服务,它 a) 产生子进程,b) 托管WCF 服务以促进进程之间的通信
  2. 编写子进程来处理“Actions”

另一种可能的解决方案

一种替代方法可能是使用 Windows Workflow Foundation 4。它相对稳定且相对易于使用(我自己也涉足过)。我不知道它是否提供您需要的隔离,但值得一看。

您将基本上授权您自己的自定义活动来执行您的操作,然后通过 WorkflowInvoker 动态执行它们。

另一种可能的解决方案

另一种可能有点笨拙但在单进程托管方面更传统并提供所需隔离的替代方法是查看托管加载项框架[MAF](查看链接中有关隔离级别的部分)。这可能有点吓人,但我的朋友Kent Boogaart 已经用它做了一些漂亮的事情,如果你保持简单,它可能会变成伎俩。

于 2010-07-16T13:51:58.310 回答
-1

在您的情况下,生成另一个进程(通过控制台应用程序或其他)可能不是一个好主意。您必须担心与该过程进行通信,这可能是一个真正的麻烦,而且它不会真正为您带来任何稳定性。我可能会做的是使用 VB.NET 来制作一个使用BackgroundWorker线程的 COM-Visible 类库。

这将使您能够在 .NET 库中的后台工作,只要您注意异常管理(在 .NET 库中),它就不会真正影响 VB6 应用程序。VB6 应用程序可以等待 .NET 库完成繁重的工作并为其提供友好的消息。

于 2010-07-16T13:44:57.220 回答