如何在不创建安装程序的情况下安装C#Windows服务?

有没有人知道是否有办法安装在C#中创建的Windows服务而无需安装程序?

您可以使用installutil

从命令行:

installutil YourWinService.exe 

此实用程序随.NET Framework一起安装

我包括一个为我安装的类。 我使用命令行参数调用应用程序来安装或卸载应用程序。 我过去也曾向用户提示是否希望直接从命令行启动时安装该服务。

这是我使用的课程:

 using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using Microsoft.Win32; namespace [your namespace here] { class IntegratedServiceInstaller { public void Install(String ServiceName, String DisplayName, String Description, System.ServiceProcess.ServiceAccount Account, System.ServiceProcess.ServiceStartMode StartMode) { System.ServiceProcess.ServiceProcessInstaller ProcessInstaller = new System.ServiceProcess.ServiceProcessInstaller(); ProcessInstaller.Account = Account; System.ServiceProcess.ServiceInstaller SINST = new System.ServiceProcess.ServiceInstaller(); System.Configuration.Install.InstallContext Context = new System.Configuration.Install.InstallContext(); string processPath = Process.GetCurrentProcess().MainModule.FileName; if (processPath != null && processPath.Length > 0) { System.IO.FileInfo fi = new System.IO.FileInfo(processPath); //Context = new System.Configuration.Install.InstallContext(); //Context.Parameters.Add("assemblyPath", fi.FullName); //Context.Parameters.Add("startParameters", "Test"); String path = String.Format("/assemblypath={0}", fi.FullName); String[] cmdline = { path }; Context = new System.Configuration.Install.InstallContext("", cmdline); } SINST.Context = Context; SINST.DisplayName = DisplayName; SINST.Description = Description; SINST.ServiceName = ServiceName; SINST.StartType = StartMode; SINST.Parent = ProcessInstaller; // http://bytes.com/forum/thread527221.html // SINST.ServicesDependedOn = new String[] {}; System.Collections.Specialized.ListDictionary state = new System.Collections.Specialized.ListDictionary(); SINST.Install(state); // http://www.dotnet247.com/247reference/msgs/43/219565.aspx using (RegistryKey oKey = Registry.LocalMachine.OpenSubKey(String.Format(@"SYSTEM\CurrentControlSet\Services\{0}", SINST.ServiceName), true)) { try { Object sValue = oKey.GetValue("ImagePath"); oKey.SetValue("ImagePath", sValue); } catch (Exception Ex) { // System.Console.WriteLine(Ex.Message); } } } public void Uninstall(String ServiceName) { System.ServiceProcess.ServiceInstaller SINST = new System.ServiceProcess.ServiceInstaller(); System.Configuration.Install.InstallContext Context = new System.Configuration.Install.InstallContext("c:\\install.log", null); SINST.Context = Context; SINST.ServiceName = ServiceName; SINST.Uninstall(null); } } } 

以下是我称之为:

 const string serviceName = "service_name"; const string serviceTitle = "Service Title For Services Control Panel Applet"; const string serviceDescription = "A longer description of what the service does. This is used by the services control panel applet"; // Install IntegratedServiceInstaller Inst = new IntegratedServiceInstaller(); Inst.Install(serviceName, serviceTitle, serviceDescription, // System.ServiceProcess.ServiceAccount.LocalService, // this is more secure, but only available in XP and above and WS-2003 and above System.ServiceProcess.ServiceAccount.LocalSystem, // this is required for WS-2000 System.ServiceProcess.ServiceStartMode.Automatic); // Uninstall IntegratedServiceInstaller Inst = new IntegratedServiceInstaller(); Inst.Uninstall(serviceName); 

你可以试试windows sc命令

C:\WINDOWS\system32>sc create

描述:SC是一个命令行程序,用于与NT服务控制器和服务进行通信。