假设一个名为的可执行文件ConsoleOrService.exe
是用C#
. 它目前是混合动力车。我可以在命令行上启动它,或者我可以使用 .Net 安装它installutil ConsoleOrService.exe
,然后启动服务。我想要第三种选择:像这样在命令行上运行它:ConsoleOrService.exe --install
并让它完成所有工作。
- 这可能吗?
- 这很难吗?
- 我该如何开始?
谢谢,如果有问题请告诉我。
假设一个名为的可执行文件ConsoleOrService.exe
是用C#
. 它目前是混合动力车。我可以在命令行上启动它,或者我可以使用 .Net 安装它installutil ConsoleOrService.exe
,然后启动服务。我想要第三种选择:像这样在命令行上运行它:ConsoleOrService.exe --install
并让它完成所有工作。
谢谢,如果有问题请告诉我。
其实很简单。我已经在我自己的许多服务中使用了它(事实上,我的所有服务都能够进行自己的安装/卸载。我使用命令行开关控制它,例如/install
or /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
类(正如您通常在服务中所拥有的那样)。