From 14fb19920633cd28fbec75e8002d6cd9f4056dd7 Mon Sep 17 00:00:00 2001 From: Eveldee Date: Sat, 4 Dec 2021 11:30:41 +0100 Subject: [PATCH] Initial Commit --- .gitignore | 592 +++++++++++++++++++++++++ ExeLauncher.sln | 25 ++ ExeLauncher/App.config | 6 + ExeLauncher/Code.cs | 45 ++ ExeLauncher/ExeLauncher.csproj | 91 ++++ ExeLauncher/Program.cs | 133 ++++++ ExeLauncher/Properties/AssemblyInfo.cs | 36 ++ ExeLauncher/icon.ico | Bin 0 -> 169113 bytes 8 files changed, 928 insertions(+) create mode 100644 .gitignore create mode 100644 ExeLauncher.sln create mode 100644 ExeLauncher/App.config create mode 100644 ExeLauncher/Code.cs create mode 100644 ExeLauncher/ExeLauncher.csproj create mode 100644 ExeLauncher/Program.cs create mode 100644 ExeLauncher/Properties/AssemblyInfo.cs create mode 100644 ExeLauncher/icon.ico diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e99a839 --- /dev/null +++ b/.gitignore @@ -0,0 +1,592 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/visualstudio,visualstudiocode,csharp,dotnetcore +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio,visualstudiocode,csharp,dotnetcore + +### Csharp ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Nuget personal access tokens and Credentials +# nuget.config + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +.idea/ +*.sln.iml + +### DotnetCore ### +# .NET Core build folders +bin/ +obj/ + +# Common node modules locations +/node_modules +/wwwroot/node_modules + +### VisualStudioCode ### + +# Local History for Visual Studio Code + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +# Support for Project snippet scope +!.vscode/*.code-snippets + +### VisualStudio ### + +# User-specific files + +# User-specific files (MonoDevelop/Xamarin Studio) + +# Mono auto generated files + +# Build results + +# Visual Studio 2015/2017 cache/options directory +# Uncomment if you have tasks that create the project's static files in wwwroot + +# Visual Studio 2017 auto generated files + +# MSTest test Results + +# NUnit + +# Build Results of an ATL Project + +# Benchmark Results + +# .NET Core + +# ASP.NET Scaffolding + +# StyleCop + +# Files built by Visual Studio + +# Chutzpah Test files + +# Visual C++ cache files + +# Visual Studio profiler + +# Visual Studio Trace Files + +# TFS 2012 Local Workspace + +# Guidance Automation Toolkit + +# ReSharper is a .NET coding add-in + +# TeamCity is a build add-in + +# DotCover is a Code Coverage Tool + +# AxoCover is a Code Coverage Tool + +# Coverlet is a free, cross platform Code Coverage Tool + +# Visual Studio code coverage results + +# NCrunch + +# MightyMoose + +# Web workbench (sass) + +# Installshield output folder + +# DocProject is a documentation generator add-in + +# Click-Once directory + +# Publish Web Output +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted + +# NuGet Packages +# NuGet Symbol Packages +# The packages folder can be ignored because of Package Restore +# except build/, which is used as an MSBuild target. +# Uncomment if necessary however generally it will be regenerated when needed +# NuGet v3's project.json files produces more ignorable files + +# Nuget personal access tokens and Credentials +# nuget.config + +# Microsoft Azure Build Output + +# Microsoft Azure Emulator + +# Windows Store app package directories and files + +# Visual Studio cache files +# files ending in .cache can be ignored +# but keep track of directories ending in .cache + +# Others + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) + +# RIA/Silverlight projects + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) + +# SQL Server files + +# Business Intelligence projects + +# Microsoft Fakes + +# GhostDoc plugin setting file + +# Node.js Tools for Visual Studio + +# Visual Studio 6 build log + +# Visual Studio 6 workspace options file + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) + +# Visual Studio LightSwitch build output + +# Paket dependency manager + +# FAKE - F# Make + +# CodeRush personal settings + +# Python Tools for Visual Studio (PTVS) + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio + +# Telerik's JustMock configuration file + +# BizTalk build output + +# OpenCover UI analysis results + +# Azure Stream Analytics local run output + +# MSBuild Binary and Structured Log + +# NVidia Nsight GPU debugger configuration file + +# MFractors (Xamarin productivity tool) working folder + +# Local History for Visual Studio + +# BeatPulse healthcheck temp database + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 + +# Ionide (cross platform F# VS Code tools) working folder + +# Fody - auto-generated XML schema + +# VS Code files for those working on multiple tools + +# Local History for Visual Studio Code + +# Windows Installer files from build outputs + +# JetBrains Rider + +### VisualStudio Patch ### +# Additional files built by Visual Studio + +# End of https://www.toptal.com/developers/gitignore/api/visualstudio,visualstudiocode,csharp,dotnetcore diff --git a/ExeLauncher.sln b/ExeLauncher.sln new file mode 100644 index 0000000..043bc6b --- /dev/null +++ b/ExeLauncher.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29609.76 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExeLauncher", "ExeLauncher\ExeLauncher.csproj", "{E002E8E2-D13A-4995-ABAB-DF7451FDA464}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E002E8E2-D13A-4995-ABAB-DF7451FDA464}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E002E8E2-D13A-4995-ABAB-DF7451FDA464}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E002E8E2-D13A-4995-ABAB-DF7451FDA464}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E002E8E2-D13A-4995-ABAB-DF7451FDA464}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {880616E9-169A-4E91-8265-3144E4316DB1} + EndGlobalSection +EndGlobal diff --git a/ExeLauncher/App.config b/ExeLauncher/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/ExeLauncher/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ExeLauncher/Code.cs b/ExeLauncher/Code.cs new file mode 100644 index 0000000..02ecd47 --- /dev/null +++ b/ExeLauncher/Code.cs @@ -0,0 +1,45 @@ +using System.Diagnostics; +using System; + +namespace ExeLauncher +{ + class Program + { + const string Paths = @"%Paths%"; + const string Arguments = @"%Arguments%"; + const string WorkingDirectories = @"%WorkingDirectories%"; + + static void Main(string[] args) + { + var paths = Paths.Split('§'); + var arguments = Arguments.Split('§'); + var workingDirectories = WorkingDirectories.Split('§'); + + for (int i = 0; i < paths.Length; i++) + { + var path = paths[i]; + var argument = arguments[i]; + var workingDirectory = workingDirectories[i]; + + if (args.Length > 0) + { + Console.WriteLine(path); + Console.WriteLine(argument); + Console.WriteLine(workingDirectory); + + continue; + } + + new Process() + { + StartInfo = new ProcessStartInfo() + { + FileName = path, + Arguments = argument, + WorkingDirectory = workingDirectory + } + }.Start(); + } + } + } +} \ No newline at end of file diff --git a/ExeLauncher/ExeLauncher.csproj b/ExeLauncher/ExeLauncher.csproj new file mode 100644 index 0000000..eb8ffdd --- /dev/null +++ b/ExeLauncher/ExeLauncher.csproj @@ -0,0 +1,91 @@ + + + + + Debug + AnyCPU + {E002E8E2-D13A-4995-ABAB-DF7451FDA464} + Exe + ExeLauncher + ExeLauncher + v4.8 + 512 + true + true + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + icon.ico + + + + + + + + + + + + + + + + + + + + + + + + + + False + Microsoft .NET Framework 4.8 %28x86 et x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + \ No newline at end of file diff --git a/ExeLauncher/Program.cs b/ExeLauncher/Program.cs new file mode 100644 index 0000000..ca38b38 --- /dev/null +++ b/ExeLauncher/Program.cs @@ -0,0 +1,133 @@ +using Microsoft.CSharp; +using System; +using System.CodeDom.Compiler; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Windows.Forms; + +namespace ExeLauncher +{ + class Program + { + const string Paths = "%Paths%"; + const string Arguments = "%Arguments%"; + const string WorkingDirectories = "%WorkingDirectories%"; + + static string code; + + [STAThread] + static void Main(string[] args) + { + var file = Assembly.GetExecutingAssembly().GetManifestResourceStream("ExeLauncher.Code.cs"); + var reader = new StreamReader(file); + + code = reader.ReadToEnd(); + + reader.Close(); + + string path, arguments, workingDirectory, icon; + + Console.Write("Path: "); + path = Console.ReadLine(); + + Console.Write("Arguments: "); + arguments = Console.ReadLine(); + + Console.Write("Working Directory: "); + workingDirectory = Console.ReadLine(); + + Console.WriteLine("Choose an icon for the executable: "); + icon = GetIcon(); + + Console.WriteLine(); + + Console.WriteLine("Creating launcher with options: "); + Console.WriteLine($"Path: {path}"); + Console.WriteLine($"Arguments: {arguments}"); + Console.WriteLine($"Working directory: {workingDirectory}"); + + Console.WriteLine(); + Console.WriteLine("Choose a location to save the file."); + + var location = GetLocation(); + + Console.WriteLine(); + Console.WriteLine("Generating file..."); + + CreateExecutable(location, path, arguments, workingDirectory, icon); + + Console.WriteLine(); + Console.WriteLine("Done."); + Console.ReadKey(true); + } + + private static void CreateExecutable(string location, string paths, string arguments, string workingDirectories, string icon) + { + code = code.Replace(Paths, paths); + code = code.Replace(Arguments, arguments); + code = code.Replace(WorkingDirectories, workingDirectories); + + using (var codeProvider = new CSharpCodeProvider()) + { + var compilerParameters = new CompilerParameters() + { + CompilerOptions = $"-target:winexe -win32icon:\"{icon}\"", + GenerateExecutable = true, + OutputAssembly = location + }; + compilerParameters.ReferencedAssemblies.Add("System.dll"); + + var result = codeProvider.CompileAssemblyFromSource(compilerParameters, code); + + if (result.Errors.HasErrors) + { + Console.WriteLine("An error occured while compiling the executable: "); + foreach (var compilerError in result.Errors) + { + Console.WriteLine("\t{0}", compilerError.ToString()); + Console.WriteLine(); + } + } + } + } + + private static string GetIcon() + { + var dialog = new OpenFileDialog() + { + CheckFileExists = true, + Filter = "Icon|*.ico" + }; + + if (dialog.ShowDialog() == DialogResult.OK) + { + return dialog.FileName; + } + + return ""; + } + + private static string GetLocation() + { + var dialog = new SaveFileDialog() + { + AddExtension = true, + DefaultExt = ".exe", + FileName = "Run.exe", + Filter = "Executable|*.exe", + OverwritePrompt = true + }; + + if (dialog.ShowDialog() == DialogResult.OK) + { + return dialog.FileName; + } + + Environment.Exit(1); + + // Impossible to reach, but compiler complained, so... + return null; + } + } +} diff --git a/ExeLauncher/Properties/AssemblyInfo.cs b/ExeLauncher/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..847624e --- /dev/null +++ b/ExeLauncher/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Les informations générales relatives à un assembly dépendent de +// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations +// associées à un assembly. +[assembly: AssemblyTitle("ExeLauncher")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ExeLauncher")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly +// aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de +// COM, affectez la valeur true à l'attribut ComVisible sur ce type. +[assembly: ComVisible(false)] + +// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM +[assembly: Guid("e002e8e2-d13a-4995-abab-df7451fda464")] + +// Les informations de version pour un assembly se composent des quatre valeurs suivantes : +// +// Version principale +// Version secondaire +// Numéro de build +// Révision +// +// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut +// en utilisant '*', comme indiqué ci-dessous : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ExeLauncher/icon.ico b/ExeLauncher/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..42486f9ac37fa7e0de385e2e6d38545b04929000 GIT binary patch literal 169113 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 literal 0 HcmV?d00001