2011-05-05 138 views
7

我想知道是否可以在登录窗口之前运行我的应用程序。它实际上是一个WinForm应用程序(最好不是Windows服务)。Windows启动时运行程序(登录前)

我的意思是我的应用程序必须运行,甚至在登录前,应该坐在系统托盘从中我能“秀”或开放接口的用户。

+6

为什么不把它变成服务? – 2011-05-05 11:22:12

+1

服务*不应该*与桌面进行交互,这对于winform应用程序来说可能是一件坏事... – 2011-05-05 11:25:01

+0

如果您的应用程序不是服务,则无法在登录前启动应用程序。但是,WinForms应用程序不能成为服务。所以... – BoltClock 2011-05-05 11:26:09

回答

7

为了有:系统启动和用户登录之间

  • 事情发生
  • 用户在通知区域的图标与

必须与之交互打破你的应用程序成两个独立的组件。其中一个将是WinForms/WPF应用程序,它提供通知区域图标并允许用户与之交互。另一个将是一个Windows服务,或者可能是一个计划任务。

一旦你做到了这一点,Windows服务可以集中精力做任何需要之前进行登录和通知区域的应用程序可以承担显示结果,或任何其他给最终用户的责任。

要回答你的意见提出关于从事件日志读取数据的问题,是的,这是可能的。这里对于其他问题,这将给你特定的答案:

+0

如果在Vista或更高版本上运行计划任务比服务更好,那么您不需要修改代码。这将允许在有UI的情况下根据需要使用管理员帐户运行该程序,但强烈建议将其分解,以便在用户帐户下运行UI,并根据需要使用WCF与托盘图标进行通信。 – 2011-05-10 06:15:26

+0

我们通过使用一个Main来打破我们的应用程序,并在我们发现服务启动时扫描“-service”参数。如果我们不推出UI循环 – Wjdavis5 2015-03-25 12:18:43

4

这MS文章可能帮助,但它是一个有点老

http://support.microsoft.com/kb/142905

希望它会把你右边的轨道,虽然。

+0

它只在用户登录时才运行我的应用程序? – 2011-05-05 11:39:31

+0

我不这么认为,这个方法实际上是在Shell之前运行的,所以在GUI加载之后,但在Explorer加载之前。它确实声明你的程序将不得不启动资源管理器才能让窗口继续运行。 – 2011-05-05 13:02:49

2

你可以安排任何应用程序时,计算机上使用Windows任务计划供电,以运行。那里有一个相应的选项。 但你为什么需要这个?你应该使用这个服务。

3

我认为,在用户登录系统之前获取用户输入没有任何意义。所以,如果应用程序需要用户输入,为什么在用户登录之前启动它?如果应用程序刚刚开始一些后台工作,则应该使用Windows服务,因为这是Windows中的首选方式。

+0

我的意思是我的应用程序必须在登录前运行,它应该位于系统托盘上,我可以从其中“显示”或打开用户界面 – 2011-05-05 12:14:55

2

键入run gpedit.msc,组策略, 在那里,你可以设置启动脚本。 应用程序将在Windows登录之前推出, 步骤产生: -

Start --> Run --> gpedit.msc --> Local Computer Policy --> Windows Settings --> Script (Startup/ShutDown), 

添加您.exe 它将推出登录之前。 不要尝试更多的组策略中,有可能发生有害系统

通过编程逻辑, 与注册表尝试键 该值由我们的程序的注册表, 更新中,我们可以直接更新注册表,然后就可以调用应用程序

+3

如果你想把关于你自己的信息做在你的个人资料页面上。 – agf 2011-08-11 17:16:17