diff --git a/Installer/Command.cs b/Installer/Command.cs new file mode 100644 index 00000000..fbd7b0b8 --- /dev/null +++ b/Installer/Command.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace Installer; + +/// 命令选项 +internal class Command +{ + #region 属性 + /// 操作名 + public String Name { get; set; } + + /// 参数集合 + public IList Arguments { get; set; } = new List(); + #endregion + + #region 方法 + /// 分析输入参数数组,得到命令选项列表 + /// + /// + public static IList Parse(String[] args) + { + var commands = new List(); + if (args == null || args.Length == 0) return commands; + + Command command = null; + for (var i = 0; i < args.Length; i++) + { + // 命令以-开头,其它是参数 + var arg = args[i]; + if (arg[0] == '-') + commands.Add(command = new Command { Name = arg }); + else + { + // 如果第一个参数不是-开头,则添加空名称命令 + if (command == null) + commands.Add(command = new Command { Name = "" }); + + command.Arguments.Add(arg); + } + } + + return commands; + } + #endregion +} diff --git a/Installer/Installer.csproj b/Installer/Installer.csproj new file mode 100644 index 00000000..2ec24ebb --- /dev/null +++ b/Installer/Installer.csproj @@ -0,0 +1,23 @@ + + + + Exe + net40;net45;net5.0;net6.0;net7.0 + 安装器 + 安装辅助工具 + 新生命开发团队 + ©2002-2023 NewLife + 1.0 + $([System.DateTime]::Now.ToString(`yyyy.MMdd`)) + $(VersionPrefix).$(VersionSuffix) + $(Version) + $(VersionPrefix).* + false + ..\Bin\Agent + + latest + app.manifest + true + + + diff --git a/Installer/Program.cs b/Installer/Program.cs new file mode 100644 index 00000000..9ece99e2 --- /dev/null +++ b/Installer/Program.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; + +namespace Installer; + +internal class Program +{ + static void Main(String[] args) + { + if (args != null) + Console.WriteLine("args: {0}", String.Join(' ', args)); + + // 分解命令(可能包括多组),逐个执行 + // 如:installer.exe -install StarAgent -start StarAgent + foreach (var cmd in Command.Parse(args)) + { + switch (cmd.Name.ToLower()) + { + case "-install": Install(cmd.Arguments); break; + case "-uninstall": Uninstall(cmd.Arguments); break; + case "-reinstall": Reinstall(cmd.Arguments); break; + case "-start": Start(cmd.Arguments); break; + case "-stop": Stop(cmd.Arguments); break; + case "-restart": Restart(cmd.Arguments); break; + default: + break; + } + } + + Console.WriteLine("Hello, World!"); + } + + static void Install(IList args) + { + + } + + static void Uninstall(IList args) + { + + } + + static void Reinstall(IList args) + { + + } + + static void Start(IList args) + { + if (args.Count == 0) return; + + Process.Start("net", $"start {args[0]}"); + } + + static void Stop(IList args) + { + if (args.Count == 0) return; + + Process.Start("net", $"stop {args[0]}"); + } + + static void Restart(IList args) + { + if (args.Count == 0) return; + + Process.Start("net", $"start {args[0]}"); + Process.Start("net", $"stop {args[0]}"); + } +} \ No newline at end of file diff --git a/Installer/app.manifest b/Installer/app.manifest new file mode 100644 index 00000000..75867c29 --- /dev/null +++ b/Installer/app.manifest @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/星尘.sln b/星尘.sln index 985a4d39..8fb27aff 100644 --- a/星尘.sln +++ b/星尘.sln @@ -38,6 +38,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{11AD EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetworkDetect", "Plugins\NetworkDetect\NetworkDetect.csproj", "{7178875E-F5DD-4136-A5E6-EEBF151396CB}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Installer", "Installer\Installer.csproj", "{3ACE1337-CD19-41BC-A2C7-EDF49474C367}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -88,6 +90,10 @@ Global {7178875E-F5DD-4136-A5E6-EEBF151396CB}.Debug|Any CPU.Build.0 = Debug|Any CPU {7178875E-F5DD-4136-A5E6-EEBF151396CB}.Release|Any CPU.ActiveCfg = Release|Any CPU {7178875E-F5DD-4136-A5E6-EEBF151396CB}.Release|Any CPU.Build.0 = Release|Any CPU + {3ACE1337-CD19-41BC-A2C7-EDF49474C367}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3ACE1337-CD19-41BC-A2C7-EDF49474C367}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3ACE1337-CD19-41BC-A2C7-EDF49474C367}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3ACE1337-CD19-41BC-A2C7-EDF49474C367}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -96,6 +102,7 @@ Global {7DE10A4D-1749-4474-A6B2-F52CA8462813} = {48B9E6E7-289F-42F2-8ACA-E7DF8E7C9059} {677C6502-2C9C-4907-AD82-670BE77B0AE6} = {48B9E6E7-289F-42F2-8ACA-E7DF8E7C9059} {7178875E-F5DD-4136-A5E6-EEBF151396CB} = {11AD7F18-1320-41C5-B4A9-F208DBCAA5A9} + {3ACE1337-CD19-41BC-A2C7-EDF49474C367} = {11AD7F18-1320-41C5-B4A9-F208DBCAA5A9} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9337283C-C795-479F-A2F1-C892EBE2490C}