2010-02-25 97 views
2

我需要我的应用程序根据某些事件来启动和停止Windows服务。问题是这个应用程序需要以高级普通用户身份运行(为了停止服务),以及在Windows启动时自动启动。此外,它需要在用户界面的系统托盘中。如何设计在Windows Vista/7上以管理员身份运行的自动启动应用程序?

我在这里有什么选择?
我想,有至少两个possibillities:

  1. 要通过把它在启动文件夹中或者在注册表中的.. \ Run键使应用程序自动启动。但问题是,如果没有每次Windows启动时弹出UAC提示对话框,都可以这样做吗?
  2. 开发安装在系统托盘中的独立GUI应用程序作为系统运行的Windows服务。但是,为了在提升的服务和正常的系统托盘应用程序之间进行通信,我有什么IPC可能性?

任何想法和建议?

回答

1

肯定会与选项2一起使用,并专门使用WCF(Windows Communication Foundation)使用wsHTTPS绑定与Windows Service进行通信,以便您可以验证是否允许登录的用户执行操作由Windows服务托管的WCF服务。

+0

是的,我认为这对我来说是最好的解决方案。谢谢。 – 2010-03-01 13:37:40

+0

很好的答案!谢谢。我投了! – Lin 2017-11-01 04:11:12

0

对于数字1,为了运行具有管理员权限的应用程序,那么就不可能没有UAC对话框运行坡平了,还是你有管理员密码

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

0

实际上,对于编号1,您可以将几个进程链接在一起以实现没有UAC对话框的高级进程。像这样

第一个过程 - >以管理员身份启动(需要一种提供凭证的方式) - >使用ShellExecute启动另一个过程并提供Runas动词。 - >您的最终过程

+0

升级的应用程序启动另一个EXE时没有提升特权吗?它依然没有数字限制,根据我的经验和我读过的内容,你不需要在shell()命令中提供任何东西,只需要下一个exe完整路径,下一个(新)exe将以相同的权限运行前一个。 – 2012-07-09 03:49:42

0

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

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

+0

我喜欢这个选项最好,永远不能理解为什么UAC特权不会记住为同一个EXE的下一次运行,但你可以通过调度程序来做到这一点,所以每个人都离开通过调度程序打开后门程序?哦,当然,他们通过销售数字证书所获得的美元,这些数字证书将您的应用程序自动提升为管理员权限,而不会弹出对话框(永远)。它将花费您的万事达卡将近1,000美元 - 想知道MicroShaft有多少钱?为什么他们会做这样的设计缺陷?只有一个后门,它的哈克! – 2012-07-09 03:53:32

相关问题