2012-08-14 148 views
4

我有一个运行在服务器上的Delphi应用程序。这个应用程序对我的数据库做了一些关键性的工作,用于其他应用程序,并在用户登录到Windows时执行。这一切都工作正常,但事实证明,服务器的管理员有时重新启动服务器,并没有登录到Windows。服务器停留在Windows登录中,我的应用程序无法启动。Windows服务+在系统托盘中运行应用程序

小的研究后,我决定创建一个Windows服务之前,甚至在Windows用户登录,开始我的应用程序。但是,我有两种形式。一种形式显示我的应用程序正在执行的当前进程,另一种形式显示其用于配置第一种形式的.ini文件。

我需要做的是创建之前在Windows和登录后用户登录开始我的应用程序的服务,展示我的表格或打开它,但它最小化到系统托盘。

是否可以使用Windows服务这种行为,并尽量减少我的形式到系统托盘?

+1

最后,你会最终分离DB工作的GUI,下面的[这个问题]的建议之一(HTTP:/ /stackoverflow.com/q/1260181/243614)互相交流。 – 2012-08-14 21:43:36

回答

14

的服务不能显示在所有在Vista中的用户界面(包括系统托盘图标)开始,并且在早期版本的劝阻。在所有版本的Windows中,应将用户界面分离为可由登录用户运行的非服务应用程序,管理该用户托盘的系统托盘图标,并根据需要与后端服务进行通信许多可用的IPC机制(管道,套接字,COM,RPC,WCF等)。

+1

很好的建议!有关Windows服务常见问题的更多信息,请参阅[“Windows服务是否需要GUI?”](http://www.coretechnologies.com/WindowsServices/FAQ.html#GUIServices)。 – CoreTech 2012-08-14 22:26:05

+0

好吧,我已经知道我没有使用UI服务,我只是想确认。我正在将应用程序分成两个应用程序。一个作为服务,另一个作为一个简单的配置程序和表单。甚至在用户登录Windows之前,服务是否有任何特定的配置?感谢您的答案,它会帮助我很多。 – Daniel 2012-08-15 19:22:57

+0

假设你使用Delphi的'TService'类,它的'StartType'属性控制何时启动服务。它默认设置为'stAuto',这意味着服务将在操作系统启动时自动启动。 – 2012-08-15 19:36:46

1

好了,你可以在服务形式,但必须以管理员身份运行,并且必须设置为一个交互式服务。

我用SVCOM与托盘图标,并可以最小化到系统托盘中的形式创造好的服务。

看一看这里:http://www.aldyn.ru/products/index.html

希望这有助于

+2

在Vista或更高版本中并非如此。 – 2012-08-15 06:44:28

+1

SvCom看起来像一个方便的工具,但从技术上说,它不能在Windows服务应用程序中直接使用表单。它仍然生成两个独立的应用程序并将它们集成在一起。你可以调整你的答案,提到像这样的工具可以帮助实现这种连接,而不是说一些实际上不可能的事情(使用新技术)。 – 2012-08-16 00:01:12

相关问题