2

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

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

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

有什么想法和建议吗?

4

4 回答 4

1

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

于 2010-02-26T00:12:17.063 回答
0

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

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

于 2010-02-25T23:56:57.603 回答
0

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

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

于 2010-02-26T00:04:53.707 回答
0

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

我无法告诉您如何以编程方式进行设置(可能有一个 WMI 界面),但通过 UI 很容易做到。

于 2010-02-27T00:31:22.207 回答