关闭

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

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

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

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
查看评论

C#设置服务允许与桌面交互,并且启动服务

private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e) { try { ConnectionOption...
  • ful1021
  • ful1021
  • 2013-12-03 17:54
  • 893

Windows 服务 操作 映射的网络驱动器

  • 2016-08-11 13:21
  • 6KB
  • 下载

Windows 服务操作映射网络驱动器示例

主体思路: 第一步:获取UNC 路径。 第二步:创建映射网络驱动器。 第三步:在相应的网络驱动器上进行相应的操作(示例中是创建文件夹)。 代码示例如下: MapDriveKit  - 映射驱动器辅助类 using System; using System.Collect...
  • CsethCRM
  • CsethCRM
  • 2016-08-11 13:27
  • 1475

C# 通过服务启动窗体(把窗体添加到服务里)实现用户交互的windows服务

由于个人需要,想找一个键盘记录的程序,从网上下载了很多,多数都是需要注册的,另外也多被杀软查杀。于是决定自己写一个,如果作为一个windows应用程序,可以实现抓取键盘的记录。想要实现随系统启动的话,其中一种方法就是要作为windows服务,把代码直接写到服务里边并不能抓取到键盘的记录,从网上翻阅资...
  • wangyong0921
  • wangyong0921
  • 2012-11-13 14:53
  • 3598

C#创建windows服务默认是没有交互界面的

<br /><br />C#创建windows服务默认是没有交互界面的,form和console程序均无法显示,但是可以在服务中打开桌面交互,开始>>运行>>services.msc>>选中你的windows服务>>右键点属性&...
  • susubuhui
  • susubuhui
  • 2011-05-20 10:41
  • 1573

Windows服务“允许服务与桌面交互”的使用和修改方法

 描述:在自己写的一个系统服务程序,需要经常用到“允许与桌面进行交互”的设置,网上很多使用修改注册表的形式实现,我测试过,修改注册表后,选中的勾是选上了,但不能弹出应用程序;据说重启电脑后可以,但我不想重启,实际应用也不允许重启,故没有测试重启是否可行的情况。如图: 例如:当我需...
  • lanruoshui
  • lanruoshui
  • 2009-11-02 10:08
  • 7012

设置c#windows服务描述及允许服务与桌面交互的几种方法

方法一:在ProjectInstaller.cs重写 install() ,Uninstall()方法public override void Install(IDictionary stateServer)  {   Microsoft.Win32...
  • jiangxinyu
  • jiangxinyu
  • 2010-03-19 17:00
  • 10768

Windows服务安装后设置自动启动与允许服务与桌面交互的方法

1、自动启动的方法设置:请先设置以下两个控件:设置serviceProcessInstaller1控件的Account属性为“LocalSystem”.设置serviceInstaller1控件的StartType属性为"Automatic". 服务上添加安装程序后,通...
  • lanruoshui
  • lanruoshui
  • 2009-12-09 08:27
  • 7651

如何解决vista和win7在windows服务中无法与桌面程序交互的问题?

问题描述 在Windows XP、Windows Server 2003 或早期Windows 系统时代,Windows服务与桌面应用程序的交互非常简单,而vista之后的版本windows加强了权限管理,也就 是所谓的session0隔离,致使在windows服务中调用Process.Star...
  • mengmakies
  • mengmakies
  • 2016-06-22 22:48
  • 1164

设置c#windows服务描述及允许服务与桌面交互的3种方法

  • 2013-02-25 16:51
  • 65KB
  • 下载
    个人资料
    • 访问:633751次
    • 积分:8444
    • 等级:
    • 排名:第2813名
    • 原创:185篇
    • 转载:181篇
    • 译文:0篇
    • 评论:96条