4

这可能是一个基本问题,所以提前道歉。

我有一个控制台应用程序,我想在 Windows Server 2003 上进行测试。

我在 C# 中使用 4.0 框架在发布模式下构建了应用程序,并将 bin 文件夹的内容粘贴到 windows server 2003 目录上的文件夹中。

当我运行 exe 时,出现以下错误:“无法从命令行或调试器启动服务。必须首先安装 Windows 服务(使用 installutil.exe),然后使用 ServerExplorer 启动,...”

现在我想使用 installutil.exe 作为服务来安装这个控制台应用程序。

谁能告诉我怎么做。

谢谢你。

4

2 回答 2

5

您更改 Main 方法;

static partial class Program
{
    static void Main(string[] args)
    {
        RunAsService();
    }

    static void RunAsService()
    {
        ServiceBase[] servicesToRun;
        servicesToRun = new ServiceBase[] { new MainService() };
        ServiceBase.Run(servicesToRun);
    }
}

然后创建新的 Windows 服务(MainService)和安装程序类(MyServiceInstaller);

主服务.cs;

partial class MainService : ServiceBase
{
    public MainService()
    {
        InitializeComponent();
    }

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

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

    protected override void OnShutdown()
    {
        base.OnShutdown();
    }
}

我的服务安装程序.cs;

[RunInstaller(true)]
public partial class SocketServiceInstaller : System.Configuration.Install.Installer
{
    private ServiceInstaller serviceInstaller;
    private ServiceProcessInstaller processInstaller;

    public SocketServiceInstaller()
    {
        InitializeComponent();

        processInstaller = new ServiceProcessInstaller();
        serviceInstaller = new ServiceInstaller();

        processInstaller.Account = ServiceAccount.LocalSystem;
        serviceInstaller.StartType = ServiceStartMode.Automatic;
        serviceInstaller.ServiceName = "My Service Name";

        var serviceDescription = "This my service";

        Installers.Add(serviceInstaller);
        Installers.Add(processInstaller);
    }
}
于 2013-06-03T19:11:01.767 回答
0

现在我想使用 installutil.exe 作为服务来安装这个控制台应用程序。

您需要将其转换为 Windows 服务应用程序而不是控制台应用程序。有关详细信息,请参阅 MSDN 上的演练:创建 Windows 服务

另一种选择是使用Windows 任务计划程序来安排系统运行您的控制台应用程序。这可以与服务非常相似,而无需实际创建服务,因为您可以安排应用程序按照您选择的任何时间表运行。

于 2013-06-03T18:40:04.937 回答