可以';t请参阅已安装的Windows服务
本文关键字:安装 Windows 服务 请参阅 可以 | 更新日期: 2023-09-27 18:29:58
我创建了一个超级简单的Windows服务程序。我选择了项目->Windows服务程序,之后我将this.ServiceName = "servicename1";
更改为`this.ServiceName = "ABC Test Service";
之后,我创建了一个安装项目,将主要输出设置为Windows服务。编译并安装了所有内容。
但是服务在服务UI下是不可见的,我不明白为什么它不可见。这个解决方案是直接开箱即用的,正如我所能想象的那样。我没有按原样对代码做任何重大的修改。但是我缺少了一些东西,所以我可以看到安装的服务。
我添加了什么重要的东西吗?这不是最初项目的一部分——我在OnStart(string[] args)
/OnStop()
中添加了一些东西。尽管我不会称之为少校。
我是否更改了最初项目的一部分。-我已将部分类重命名为
public partial class ABCTestService : ServiceBase
{
public ABCTestService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Console.WriteLine("Service Start");
}
protected override void OnStop()
{
Console.WriteLine("Service Stop");
}
}
在我更改分部类的名称之前,该服务也是不可见的。安装过程中没有任何警告或错误。所以服务必须安装,所以它应该是可见的。
using System.ServiceProcess;
namespace WindowsService1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new ABCTestService()
};
ServiceBase.Run(ServicesToRun);
}
}
}
现在说ABCTestService()
,确实说Service1()
。在我更改分部类的名称之前,VS2010对名称进行了全面更改。
这对我有效
安装:
C:'Windows'Microsoft.NET'Framework64'v4.0.30319'installutil C:'MySampleService'bin'Debug'MyService.exe
卸载:
C:'Windows'Microsoft.NET'Framework64'v4.0.30319'installutil /u C:'MySampleService'bin'Debug'MyService.exe
还有一种较短的方法可以安装带有参数的服务,您可以在启动服务时从命令行指定这些参数。两者基本上都执行相同的任务。请注意,第一种方法将记录进度和详细信息,而我已将其排除在"快捷方式"解决方案之外。
static void Main(string[] args)
{
if (Environment.UserInteractive)
{
string parameter = string.Concat(args);
switch (parameter)
{
case "--install":
ManagedInstallerClass.InstallHelper(new[] { Assembly.GetExecutingAssembly().Location });
break;
case "--uninstall":
ManagedInstallerClass.InstallHelper(new[] { "/u", Assembly.GetExecutingAssembly().Location });
break;
}
}
我的OnStart方法只是执行我希望的代码
protected override void OnStart(string[] args)
{
//MyCode
}
此外,我发现将我的服务作为控制台应用程序编写非常有益,可以方便地进行开发和调试。完成此操作后,只需创建安装程序并按照上面列出的方式运行即可将其转化为服务。还要注意if(Environment.UserInteractive)语句。其他功能将像运行控制台应用程序一样启动,为您提供前面提到的在更友好的环境中调试/开发的优势。
编辑
*如果您没有安装程序,请包括安装程序,例如ProjectInstaller.cs
确保ProjectInstaller.cs配置正确。(也许你没有指定一个合适的名字)。这是我的精简版,使用"MyService"作为名称
[RunInstaller(true)]
public class ProjectInstaller : Installer
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
public ProjectInstaller()
{
InitializeComponent();
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
//
// serviceProcessInstaller1
//
this.serviceProcessInstaller1.Password = "username";
this.serviceProcessInstaller1.Username = @"password";
//
// serviceInstaller1
//
this.serviceInstaller1.ServiceName = "MyService";
//
// ProjectInstaller
//
this.Installers.AddRange(new System.Configuration.Install.Installer[] {
this.serviceProcessInstaller1,
this.serviceInstaller1});
}
private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
private System.ServiceProcess.ServiceInstaller serviceInstaller1;
}
您需要将服务安装程序添加到您的服务项目中。最简单的方法是关闭所有代码窗口。然后双击您的服务,它应该会在设计视图中打开该服务。
现在,在属性窗口的底部应该有一个名为"添加安装程序"的链接。单击该按钮,它将添加一个项目安装程序,其中将包括一个服务安装程序和一个服务流程安装程序。这些都有一些属性,比如你的服务应该在哪个用户帐户下运行,等等。
正是这个类包含了安装服务的逻辑。