Windows services 混合.Net exe(控制台应用程序/Windows服务)是否有一种相对简单的方式作为服务安装和启动自身?

Windows services 混合.Net exe(控制台应用程序/Windows服务)是否有一种相对简单的方式作为服务安装和启动自身?,windows-services,.net-4.0,bootstrapping,Windows Services,.net 4.0,Bootstrapping,假设名为ConsoleOrService.exe的可执行文件是用C.编写的。它目前是一种混合动力车。我可以在命令行上启动它,也可以使用.Net的installutil ConsoleOrService.exe安装它,然后启动服务。我想要第三个选项:像这样在命令行上运行它:ConsoleOrService.exe——安装并让它完成所有工作 这可能吗 这难吗 我如何开始 谢谢,如果有问题请告诉我。其实很简单。我在自己的许多服务中都使用过它(事实上,我所有的服务都可以自己安装/卸载。我通过命令行开关来

假设名为
ConsoleOrService.exe
的可执行文件是用
C.
编写的。它目前是一种混合动力车。我可以在命令行上启动它,也可以使用.Net的
installutil ConsoleOrService.exe安装它,然后启动服务。我想要第三个选项:像这样在命令行上运行它:
ConsoleOrService.exe——安装
并让它完成所有工作

  • 这可能吗
  • 这难吗
  • 我如何开始

  • 谢谢,如果有问题请告诉我。

    其实很简单。我在自己的许多服务中都使用过它(事实上,我所有的服务都可以自己安装/卸载。我通过命令行开关来控制它,例如
    /install
    /uninstall

    安装过程如下所示:

    private static void InstallService()
    {
     var ti  = new System.Configuration.Install.TransactedInstaller();
     var si  = new MyServiceInstaller();
     var cl  = new string[] { string.Format(CultureInfo.InvariantCulture, "/assemblypath={0}", System.Reflection.Assembly.GetExecutingAssembly().Location) };
     var ctx = new System.Configuration.Install.InstallContext(null, cl);
    
     ti.Installers.Add(si);
     ti.Context = ctx;
     ti.Install(new Hashtable());
    }
    
    卸载是相同的,只是调用
    ti.Uninstall(null);
    而不是
    ti.Install(…);


    My
    MyServiceInstaller
    是一个继承自
    System.Configuration.Install.Installer
    类的类(通常在服务中).

    Nice,你能给我们展示更多的细节吗,比如你如何处理程序中的命令行?我假设这是其中的一部分,我确信会出现各种恶劣的异常。为了回应Pierre,如果你不介意共享更多的代码,那将是非常受欢迎的。我的命令行处理并不比
    if更复杂(args.Length>0){…}
    和此特定项目中的
    开关(args[0]){…}
    。我不会专门处理任何异常,因为有一个为我进行日志记录的
    AppDomain.CurrentDomain.UnhandledException
    的全局处理程序。