安装 启动 停止 卸载 Windows服务 c#

问题:windows服务安装时,出错:System.ComponentModel.Win32Exception: 帐户名无效或不存在,

解决:将serviceProcessInstaller1->Accout属性,设为:LocalSystem(默认是User)。

   运行: Installuitl 程序名.exe ,安装成功。

   卸载是  Installuitl /u 程序名.exe 

 

问题:如何不使用InstallUtil 安装 启动 停止 卸载 Windows服务?

解决:用System.Configuration.Install.AssemblyInstaller类加载一个程序集,并运行其中的安装程序。    
    [C#]    
    //安装服务
    public static void InstallService(string filepath, string serviceName, string[] options)
    {
        try
        {
            if (!IsServiceExisted(serviceName))
            {
                IDictionary mySavedState = new Hashtable();
                AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                myAssemblyInstaller.UseNewContext = true;
                myAssemblyInstaller.Path = filepath;
                myAssemblyInstaller.CommandLine = options;
                myAssemblyInstaller.Install(mySavedState);
                myAssemblyInstaller.Commit(mySavedState);
                myAssemblyInstaller.Dispose();
            }
        }
        catch (Exception ex)
        {
            throw new Exception("Install Service Error\n" + ex.Message);
        }
    }
    //卸载服务
    public static void UnInstallService(string filepath, string serviceName, string[] options)
    {
        try
        {
            if (IsServiceExisted(serviceName))
            {
                AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
                myAssemblyInstaller.UseNewContext = true;
                myAssemblyInstaller.Path = filepath;
                myAssemblyInstaller.CommandLine = options;
                myAssemblyInstaller.Uninstall(null);
                myAssemblyInstaller.Dispose();
            }
        }
        catch (Exception ex)
        {
            throw new Exception("UnInstall Service Error\n" + ex.Message);
        }
    }
    //判断服务是否存在
    public static bool IsServiceExisted(string serviceName)
    {
        ServiceController[] services = ServiceController.GetServices();
        foreach (ServiceController s in services)
        {
            if (s.ServiceName == serviceName)
            {
                return true;
            }
        }
        return false;
    }
    //启动服务
    public static void StartService(string serviceName)
    {
        if (IsServiceExisted(serviceName))
        {
            System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
            if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running &&
                service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
            {
                service.Start();
                service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(60));
            }
        }
    }
    //停止服务
    public static void StopService(string serviceName)
    {
        if (IsServiceExisted(serviceName))
        {
            System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
            if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
            {
                service.Stop();
                service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(60));
            }
        }
    }

问题:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系。"

public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{   // 总是接受    
      return true;
} 

在发送请求前面加上如下一行代码:

ServicePointManager.ServerCertificateValidationCallback = CheckValidationResult;

问题:如何制作批处理文件实现服务的安装和卸载

 安装

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe %~dp0\yourService.exe
Net Start yourService
sc config
yourService start= auto
pause
tip:
1:%~dp0 表示批处理文件当前目录
2:installutil.exe这个文件也可以复制到当前服务目录,写法就可以用 %~dp0\installutil.exe %~dp0\yourService.exe 了
3:设置服务为自动运行

卸载

%~dp0\InstallUtil.exe %~dp0\yourService.exe -u
pause

 



 

你可能感兴趣的:(windows)