Beispiel #1
0
 private static void ProcessBLI(BasicLaunchInfo info)
 {
     if (info.StartMinimized)
     {
         info.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
     }
 }
Beispiel #2
0
 public ProcessExitResult Launch(BasicLaunchInfo info)
 {
     ProcessBLI(info);
     using (var process = new Process {
         StartInfo = info.StartInfo
     }) {
         LaunchAndWaitForExit(process, info.MonitorOutput, info.MonitorResponding);
         return(new ProcessExitResult(process.ExitCode, process.Id, info.StartInfo));
     }
 }
Beispiel #3
0
 public ProcessExitResult LaunchElevated(BasicLaunchInfo info)
 {
     info.StartInfo.EnableRunAsAdministrator();
     ProcessBLI(info);
     using (var process = new Process {
         StartInfo = info.StartInfo
     }) {
         LaunchAndWaitForExit(process, info.MonitorOutput, info.MonitorResponding);
         return(new ProcessExitResult(process.ExitCode, process.Id, info.StartInfo));
     }
 }
Beispiel #4
0
 public async Task <ProcessExitResult> LaunchAsync(BasicLaunchInfo info)
 {
     ProcessBLI(info);
     using (var process = new ReactiveProcess {
         StartInfo = info.StartInfo
     }) {
         return
             (await
              LaunchAndWaitForExitAsync(process, info.MonitorOutput, info.MonitorResponding,
                                        info.CancellationToken)
              .ConfigureAwait(false));
     }
 }
        protected static async Task BuildAndRunBatFile(IProcessManager pm, IAbsoluteDirectoryPath tmpFolder,
                                                       IEnumerable <string> commands, bool asAdministrator = false, bool noisy = false)
        {
            var batFile        = tmpFolder.GetChildFileWithName("install.bat");
            var actualCommands =
                new[] { "chcp 65001" }.Concat(commands)
            .Concat(new[] { "echo finished" })
            .Select(x => x == "" ? x : x + " >> install.log");
            var commandBat = string.Join("\r\n",
                                         new[] { "", "echo starting > install.log" }.Concat(actualCommands)
                                         .Concat(new[] { "" }));
            var encoding = Encoding.UTF8;

            File.WriteAllText(batFile.ToString(), commandBat, encoding);
            if (Common.Flags.Verbose || noisy)
            {
                MainLog.Logger.Info("install.bat content:\n" + commandBat);
            }

            try {
                var pInfo = new ProcessStartInfoBuilder(batFile)
                {
                    WorkingDirectory = tmpFolder
                                       //WindowStyle = ProcessWindowStyle.Minimized
                }.Build();
                pInfo.CreateNoWindow = true;
                var basicLaunchInfo = new BasicLaunchInfo(pInfo)
                {
                    StartMinimized = true
                };
                var r =
                    await(asAdministrator ? pm.LaunchElevatedAsync(basicLaunchInfo) : pm.LaunchAsync(basicLaunchInfo));
                r.ConfirmSuccess();
            } catch (Win32Exception ex) {
                if (ex.IsElevationCancelled())
                {
                    throw ex.HandleUserCancelled();
                }
                throw;
            }
            var logFile = tmpFolder.GetChildFileWithName("install.log");
            var output  = File.ReadAllText(logFile.ToString(), encoding);

            if (Common.Flags.Verbose || noisy)
            {
                MainLog.Logger.Info("install.bat output:\n" + output);
            }
        }
Beispiel #6
0
        public ProcessExitResultWithOutput LaunchAndGrab(BasicLaunchInfo info)
        {
            ProcessBLI(info);
            var outputBuilder = new StringBuilder();
            var errorBuilder  = new StringBuilder();
            var outInfo       = LaunchAndProcess(new LaunchAndProcessInfo(info.StartInfo.EnableRedirect())
            {
                StandardOutputAction = (process, data) => outputBuilder.AppendLine(data),
                StandardErrorAction  = (process, data) => errorBuilder.AppendLine(data),
                MonitorOutput        = info.MonitorOutput,
                MonitorResponding    = info.MonitorResponding
            });

            return(new ProcessExitResultWithOutput(outInfo.ExitCode, outInfo.Id, info.StartInfo,
                                                   outputBuilder.ToString(),
                                                   errorBuilder.ToString()));
        }
Beispiel #7
0
        async Task <Process> LaunchUpdaterProcess(LaunchGameInfoBase spec, ProcessStartInfo startInfo)
        {
            LogGameInfo(spec);
            LogStartupInfo(startInfo);
            var lInfo = new BasicLaunchInfo(startInfo);

            if (spec.WaitForExit)
            {
                await(spec.LaunchAsAdministrator ? _processManager.LaunchElevatedAsync(lInfo) : _processManager.LaunchAsync(lInfo)).ConfigureAwait(false);
            }
            else
            {
                using (var p = spec.LaunchAsAdministrator ? _processManager.StartElevated(startInfo) : _processManager.Start(startInfo)) { }
            }

            var procName = spec.ExpectedExecutable.FileNameWithoutExtension;

            return(await FindGameProcess(procName).ConfigureAwait(false));
        }