示例#1
0
        public Task <Process> Launch(LaunchOptions options)
        {
            _logger.LogInformation($"Launching app: '{options.FilePath}' using credentials for: '{options.Domain}'");

            StartUpInfo startupInfo = new StartUpInfo();

            startupInfo.cb            = Marshal.SizeOf(startupInfo);
            startupInfo.lpTitle       = null;
            startupInfo.dwFlags       = (int)StartUpInfoFlags.UseCountChars;
            startupInfo.dwYCountChars = 50;

            var workingDirectory = !string.IsNullOrWhiteSpace(options.WorkingDirectory)
                ? options.WorkingDirectory
                : Path.GetDirectoryName(options.FilePath);

            var password = _cipherService.Decrypt(options.Password);

            var process = RunAs.StartProcess(
                userName: options.UserName,
                domain: options.Domain,
                password: password,
                logonFlags: RunAs.LogonFlags.NetworkCredentialsOnly,
                applicationName: null,
                commandLine: options.FilePath,
                creationFlags: RunAs.CreationFlags.NewConsole,
                environment: IntPtr.Zero,
                currentDirectory: workingDirectory,
                startupInfo: ref startupInfo,
                processInfo: out _
                );

            return(Task.FromResult(process));
        }