2012-04-10 70 views
0

我有一个64位的Windows服务项目,现在我需要一个32位可执行文件,它应该具有与Windows服务相同的生命周期。由于64位应用程序域无法加载32位DLL,因此我必须在64位Windows服务的OnStart()函数内启动此32位可执行文件。我想知道我应该如何保持这个32位可执行文件的生命周期?基本上我现在所做的是在OnStart()中启动可执行文件并在OnStop()中退出它。Windows服务项目维护另一个可执行文件?

但我现在担心的是,如果这32位可执行文件(进程)在运行Windows服务的过程中遇害或崩溃,该怎么办?我需要重新启动它。在Windows服务中是否有地方或功能,我可以在其中监视其他进程,并且每当这些进程被杀死时,我可以重新启动它们?或者我可以考虑嵌套的Windows服务,但是我找不到有关此主题的任何有用材料。

感谢您的帮助!

+0

所以你有一个服务,它依赖于一个应用程序?这是不好的设计......如果没有用户登录会怎么样? – KingCronus 2012-04-10 10:00:53

+0

如果它们都是服务,则可以使用ServiceController来检查另一个服务的状态,甚至可以启动/停止/重新启动它。这是因为所有的服务都将充当行政专家。 – KingCronus 2012-04-10 10:01:46

+0

@AdamKing感谢您的回复。究竟为什么这是一个坏主意?我记得我读了一些关于启动一个可执行文件,即使没有Windows登录。而我的32位可执行文件不需要任何交互。但无论如何,这基本上是我自由决定32位进程是应用程序还是Windows服务。所以我也会检查ServiceController。 – tete 2012-04-10 11:20:14

回答

1

我个人的做法是将两个可执行文件都配置为Windows服务,这样您可以按照预期的方式使用ServiceController以确保您的程序正常运行。您还可以将一项服务设置为另一项服务的先决条件。

我不会建议从服务启动应用程序,因为这个你会被打开了相当的困难......

例如,该用户将应用程序是下运行?

沿着ServiceController路线走下去,让两部分都成为服务肯定会成为我的首选路线。

从设计角度来看,应该运行所有时间并且不需要接口的可执行文件应该确实是一个Windows服务,以便操作系统给出正确的调度并且能够自动重新启动该计划应该有一个问题。

相关问题