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