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

时间:2010-02-25 17:42:30

标签: c# .net uac autostart

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

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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