本文信息来源于网络,本人只是汇总。
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)
{
}
}
}