关闭

C# 编写Windows服务并设置为“允许服务与桌面交互”

标签: windows服务允许服务与桌面交互
2895人阅读 评论(0) 收藏 举报
分类:

本文信息来源于网络,本人只是汇总。

VS创建项目,项目类型选择Window服务

为服务创建安装程序

1.. 返回到 Service1 的“设计”视图。
2.. 单击设计器的背景以选择服务本身,而不是它的任何内容。
3.. 在“属性”窗口中,单击属性列表下面灰色区域中的“添加安装程序”链接。
默认情况下,向您的项目添加包含两个安装程序的组件类。将该组件命名为
ProjectInstaller,它包含的安装程序分别是服务的安装程序和服务关联进程的安装程
序。

4.. 访问 ProjectInstaller 的“设计”视图,然后单击“ServiceInstaller1”。
5.. 在“属性”窗口中,将 ServiceName 属性设置为 MyNewService。
6.. 将 StartType 属性设置为 Automatic。
7.. 在设计器中,选择 ServiceProcessInstaller1(针对 Visual Basic 项目),
或 serviceProcessInstaller1(针对 Visual C# 项目)。将 Account 属性设置为
LocalService。这将使得在本地服务帐户上安装和运行该服务。有关更多信息,请参见
ServiceProcessInstaller.Account 属性。
安全说明 LocalService 帐户用作本地计算机上的非特权用户,向任何远程服务
器显示匿名凭据。使用其他帐户时需要特别小心,因此它们具有较高的特权,会增加您
受到恶意代码攻击的风险。

设置服务为“允许服务与桌面交互”
如需设置“允许服务与桌面交互“上文中的第7步:Account的属性必须设置为LocalSystem,然后在ProjectInstaller.cs中ProjectInstaller类中重载OnAfterInstall,如下代码:

[RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
        }

        protected override void OnAfterInstall(IDictionary savedState)
        {
            try
            {
                base.OnAfterInstall(savedState);
                System.Management.ManagementObject myService = new System.Management.ManagementObject(
                    string.Format("Win32_Service.Name='{0}'", this.serviceInstaller1.ServiceName));
                System.Management.ManagementBaseObject changeMethod = myService.GetMethodParameters("Change");
                changeMethod["DesktopInteract"] = true;
                System.Management.ManagementBaseObject OutParam = myService.InvokeMethod("Change", changeMethod, null);
            }
            catch (Exception)
            {
            }
        }
    }
0
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:587209次
    • 积分:8022
    • 等级:
    • 排名:第2836名
    • 原创:185篇
    • 转载:180篇
    • 译文:0篇
    • 评论:93条