我有我想要定期地执行外部程序Windows服务。目前,我正在做这个通常的方式

Process program = Process.Start(@"C:\mpewatch\db_parameters\DBParameters.exe");

这似乎并不奏效。我从在我服务的OnStart处理程序启动一个单独的线程执行此。是否有任何概念问题呢?它是不可能从这样的吗?

服务执行外部程序
有帮助吗?

解决方案

您的问题没有说明操作系统。

在Windows XP中,你可以配置你的Windows服务,打开服务控制面板与桌面互动,双击您服务,选择登录选项卡,配置服务,以作为本地系统运行,并勾选复选框。这是非常简单的。你可以尝试的东西,如Notepad.exe的测试只是为了看看,如果你能得到它的工作。

在Vista的(大概视窗7),但是,你可能是出于运气。我已阅读,适用于Windows的能力,服务交互与桌面已经在Vista中被删除。我忘记了术语是什么,但基本服务将运行在“壳0”,而用户将占据“壳1”。用户应用程序将能够使用的服务和使用技术,如WCF通信,反之亦然,但服务不能直接与桌面进行通信。例如,弹出任何错误框将必须被交换到“壳0”来处理再次,这是基于什么我读了几个月前,我还没有去它再次寻找。对于我来说,我已经结构化我的Windows服务,通过前端应用程序中使用WCF进行配置。

我很抱歉,我没有一个链接给你,但如果你的服务最终将不得不迁移到一个新的操作系统(或者你已经在那里),这是值得检查。

其他提示

您的可以的从服务执行外部程序,但也有安全问题。例如,服务可能会不具有读访问,其中外部程序驻留,即使交互式帐户确实具有访问该文件夹的帐户下运行。

有关测试目的,尝试配置交互式帐户下运行服务。如果按预期该程序被调用时,然后与原始帐户的问题是,它不具有足够的特权来运行该程序。

与Windows服务的另一个重要的考虑因素是不存在GUI。从技术上讲,有一个选项,以使服务能够与当地的GUI交互,但你不会看到它。这是由于运行作为本地系统用户服务。

内的服务,任何模态对话框(确定,取消,等)被认为是一个错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top