飞心似剑

快乐思考

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
  开发代码过程中,可能需要定时执行一些操作,如重新启动计算机,备份数据库等;这些简单操作可以通过使用WINDOWS的计划任务设置完成。但其他较复杂任务,如根据参数进行数据库数据整理,根据数据库指定时间执行特定操作,计划任务往往力不从心了。SQL SERVER的调度任务也提供了定时执行的功能,但对于动态执行DLL也无能为力。

为此,我开发一可定时执行指定代码dll的服务类,为防止执行异常影响其他代码,我使用的新建独立应用程序域作为DLL代码执行的应用程序域。
 
 

定时服务配置文件保存了程序集的配置项,采用DATASET直接生成XML文件形式。定时服务配置器用于编辑定时服务配置文件。程序集为标准.NET DLLEXE文件。通过使用服务配置器,可在不修改任何已有代码的前提下,定时执行指定代码。

核心代码如下

ClassProcess

ClassRem

 

其中,ClassProcess用于在其他程序域中执行程序集,

setup.ApplicationBase 用于设定应用程序起始路径, 

setup.PrivateBinPath 用于设定可执行文件路径。

这里出现了一个问题,如果把setup.ApplicationBase设置为CLASSCONFIG的路径,也就是服务执行的当前路径,就会出现动态执行程序集不能读取程序集配置文件的问题。如需要调用程序集为c:\test.dll其配置文件名为c:\test.dll.config这时需要把配置文件test.dll.config放在setup.ApplicationBas路径下方可正常运行,引起程序配置的不便。修改setup.PrivateBinPath没有任何作用。

如果把setup.ApplicationBase设置为待执行程序集的路径,则回出现找不到程序加载器CLASSLOAD的错误,必须把CLASSLOAD.DLL复制到程序集路径下方可正常运行。修改setup.PrivateBinPath没有任何作用。还请各位指教。

/Files/Daling/m5.rar


posted on 2005-10-01 20:53  Daling  阅读(1240)  评论(0)    收藏  举报