将Minio.exe注册成windows服务

minio 注册成windows 服务的工具开发

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Main : Form
    {
        public Main()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 注册服务
           var script= this.CreateXmlContent();

            try
            {
                using (Runspace runspace = RunspaceFactory.CreateRunspace())
                {
                    runspace.Open();
                    PowerShell ps = PowerShell.Create();
                    ps.Runspace = runspace;
                    ps.AddScript(script);
                    ps.Invoke();
                }

                Thread.Sleep(2000);
                // 启动服务
                StartService();

                MessageBox.Show(@"服务启动成功");
            }
            catch (Exception ex)
            {
                MessageBox.Show(@"注册失败");
            }
        }

        private string CreateXmlContent()
        {
            var filePath = Path.Combine(Directory.GetCurrentDirectory(), "minio-service.ps1");
            if (!File.Exists(filePath))
            {
                File.Create(filePath).Close();
            }

            var content =
                "if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }";
            content += "Set-Location -Path $PSScriptRoot

";
            content += "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
";
            content += "$config = @'
";
            content += "<service>
";
            content += $" <id>{textBox1.Text}</id>
";
            content += $" <name>{textBox1.Text}</name>
";
            content += " <description>MinIO server is a nb oss server</description>
";
            content += " <executable>minio.exe</executable>
";
            content += $@" <env name=""MINIO_ACCESS_KEY"" value=""{textBox5.Text}"" />" + "
";
            content += $@" <env name=""MINIO_SECRET_KEY"" value =""{textBox4.Text}"" />" + "
";
            content += $@" <arguments>server --address 0.0.0.0:{textBox2.Text} {textBox3.Text}</arguments>" + "
";
            content += @" <logmode>rotate</logmode>" + "
";
            content += @" </service>" + "
";
            content += @"'@" + "

";
            content += @"Set-Content ""minio-service.xml"" $config" + "
";
            content += @"Start-Process -WorkingDirectory $PSScriptRoot -FilePath ""$($PSScriptRoot)minio-service.exe"" -ArgumentList ""install"" -NoNewWindow -PassThru -Wait" + "
";
            content += @"Write-Host ""Installation done""";

            File.WriteAllText(filePath, content, Encoding.Default);

            return filePath;
        }

        private void Main_Load(object sender, EventArgs e)
        {
            textBox3.Text = Path.Combine(Directory.GetCurrentDirectory(), "minio");
            // 获取资源
            var minio_service = MinioTool.Properties.Resources.minio_service;
            var exePath = Path.Combine(Directory.GetCurrentDirectory(), "minio-service.exe");
            if (!File.Exists(exePath))
            {
                File.Create(exePath).Close();
            }
            File.WriteAllBytes(exePath, minio_service);
        }

        /// <summary>
        /// 启动服务
        /// </summary>
        private void StartService()
        {
            ServiceController[] services = ServiceController.GetServices();
            foreach (ServiceController service in services)
            {
                if (service.ServiceName == textBox1.Text)
                {
                    if (service.Status != ServiceControllerStatus.Running)
                    {
                        service.Start();
                    }
                }
            }
        }
    }
}

软件截图:
png

原文地址:https://www.cnblogs.com/dongteng/p/13955178.html