gpt4 book ai didi

c# - 在 .NET 中自行安装 Windows 服务

转载 作者:IT王子 更新时间:2023-10-29 03:58:20 26 4
gpt4 key购买 nike

我已阅读 this question .我有同样的问题,但我不明白 lubos hasko 的回答。我到底该怎么做?有人能给我发完整的演练吗?

当我运行下面的代码时,安装了一些东西,但在服务列表中,我找不到它。

我有这个,但这不起作用:

using System;
using System.Collections.Generic;
using System.Configuration.Install;
using System.Linq;
using System.Reflection;
using System.ServiceProcess;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{

public class Service1 : ServiceBase
{
public Service1()
{
File.AppendAllText("sss.txt", "ccccc");
}

protected override void OnStart(string[] args)
{
File.AppendAllText("sss.txt", "asdfasdf");
}

protected override void OnStop()
{
File.AppendAllText("sss.txt", "bbbbb");
}


static void Main(string[] args)
{
if (System.Environment.UserInteractive)
{
string parameter = string.Concat(args);
switch (parameter)
{
case "--install":
ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
break;
case "--uninstall":
ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
break;
}
}
else
{
ServiceBase.Run(new Service1());
}


Console.ReadKey();
}
}
}

这个我也不懂:

if (System.Environment.UserInteractive) ...

最佳答案

这是我的完整解决方案,并且有效。这与 this 中的答案基本相同问题。

using System;
using System.Configuration.Install;
using System.Reflection;
using System.ServiceProcess;
using System.IO;

namespace ConsoleApplication1
{
class Program : ServiceBase
{
static void Main(string[] args)
{

AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;


if (System.Environment.UserInteractive)
{
string parameter = string.Concat(args);
switch (parameter)
{
case "--install":
ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
break;
case "--uninstall":
ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
break;
}
}
else
{
ServiceBase.Run(new Program());
}



}

private static void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
File.AppendAllText(@"C:\Temp\error.txt", ((Exception)e.ExceptionObject).Message + ((Exception)e.ExceptionObject).InnerException.Message);
}

public Program()
{
this.ServiceName = "My Service";
File.AppendAllText(@"C:\Temp\sss.txt", "aaa");

}

protected override void OnStart(string[] args)
{
base.OnStart(args);

File.AppendAllText(@"C:\Temp\sss.txt", "bbb");
}

protected override void OnStop()
{
base.OnStop();

File.AppendAllText(@"C:\Temp\sss.txt", "ccc");
}
}
}

在同一个项目中创建这个类:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.ServiceProcess;
using System.Text;

namespace ConsoleApplication1
{
[RunInstaller(true)]
public class MyWindowsServiceInstaller : Installer
{
public MyWindowsServiceInstaller()
{
var processInstaller = new ServiceProcessInstaller();
var serviceInstaller = new ServiceInstaller();

//set the privileges
processInstaller.Account = ServiceAccount.LocalSystem;

serviceInstaller.DisplayName = "My Service";
serviceInstaller.StartType = ServiceStartMode.Automatic;

//must be the same as what was set in Program's constructor
serviceInstaller.ServiceName = "My Service";
this.Installers.Add(processInstaller);
this.Installers.Add(serviceInstaller);
}
}
}

在 Windows 7 上以管理员身份使用参数 --install/--uninstall 运行此程序。检查 temp 中的错误日志。检查同一路径上的工作日志。

关于c# - 在 .NET 中自行安装 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com