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

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

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)
            {
            }
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值