如何设计在Windows Vista / 7上以管理员身份运行的自动启动应用程序?

我需要我的应用程序根据某些事件启动和停止Windows服务。 问题是这个应用程序需要作为一个提升的普通用户(为了停止服务)运行,以及在Windows启动时自动启动。 另外,它需要在具有用户界面的系统托盘中。

我有什么选择?
我想至少有两种可能性:

  1. 通过将应用程序放入Startup文件夹或注册表中的.. \ Run键来使应用程序自动启动。 但问题是,这可以在每次Windows启动时弹出UAC提示对话框时完成吗?
  2. 开发一个安装为系统运行的Windows服务,在sys托盘中使用单独的GUI应用程序。 但是为了在提升的服务和普通的sys托盘应用程序之间进行通信,我有什么IPC可能性?

有什么想法和建议吗?

绝对使用选项2并专门使用WCF(Windows Communication Foundation)使用wsHTTPS绑定与Windows服务进行通信,以便您可以validation登录用户是否可以在Windows服务托管的WCF服务上执行操作。

实际上,对于数字1,您可以将两个进程链接在一起,以在没有UAC对话框的情况下实现提升的进程。 像这样

第一个进程 – >以管理员身份启动(需要一种提供凭据的方法) – >使用ShellExecute启动另一个进程并提供Runas动词。 – >你的最后一个过程

对于数字1,为了以管理员权限运行您的应用程序,如果没有弹出UAC对话框,或者您拥有管理员密码,则无法运行它

对于2号,这是一个有趣的话题,这里有一篇很好的文章,有示例和源代码: http : //www.codeproject.com/KB/threads/process_communication.aspx主题是.net远程处理。 我确定这是在不同的应用程序之间进行通信的最佳方式。

您可以使用“计划任务”工具来完成所需的任务。 对于调度,可以选择安排程序在用户登录时运行。 可以使用备用凭据运行任务。

我无法告诉你如何以编程方式设置它(可能有一个WMI接口),但通过UI很容易。