从提升的子进程获取错误和标准输出

2024-04-02

我创建了一个进程处理程序,它启动两种类型的进程: 使用管理员用户名和密码提升的权限 另一种无需输入任何用户名和密码即可正常运行。

我正在努力弄清楚如何从提升的进程中获取输出。启动进程的应用程序不需要管理员凭据即可运行,管理员凭据输入到单独的加密 xml 文件中,应用程序在脚本和其他需要管理员凭据的地方使用该文件。

由于应用程序是由普通用户运行的,因此访问应用程序已启动的提升的进程似乎是不可能的。我可以启动一个进程,并且可以轻松检查它是否完成了预期的操作,但我无法将其操作读取到字符串或日志中。

public bool CreateProcessWithAdminRights(string filePath, string commandlineArgument, bool log)
{
    if (!string.IsNullOrEmpty(filePath) && !string.IsNullOrEmpty(commandlineArgument) && _user.UserDataExsists())
    {
        var securePassword = GetSecureString(_user.Password);

        ToolsProvider.Logger.Debug("Creating process with the following filepath: {0} and commandline argument: {1}", filePath, commandlineArgument.Replace(_user.Password, "<REPLACED>"));
        ToolsProvider.Logger.Info("Creating Process with admin rights for {0} against {1}", _user.Name );

        _proc = new Process
        {
            StartInfo =
            {
                FileName = @filePath,
                Arguments = commandlineArgument,
                ErrorDialog = false,
                RedirectStandardInput = false,
                RedirectStandardOutput = _log,
                RedirectStandardError = _log,
                UseShellExecute = false,
                CreateNoWindow = true,
                WindowStyle = ProcessWindowStyle.Hidden,
                UserName = _user.Name,
                Password = securePassword,
                Domain = _user.Domain
            }
        };
        _proc.ErrorDataReceived += ErrorDataReceived;
        _proc.OutputDataReceived += OutputDataReceived;
        return true;
    }
    return false;
}

该过程使用以下命令启动:

private bool StartProcess()
{
    if (_proc != null)
    {
        try
        {
            _proc.Start();
            _proc.BeginErrorReadLine();
            _proc.BeginOutputReadLine();
            _proc.WaitForExit();
            _proc.CancelOutputRead();
            _proc.CancelErrorRead();

            if (_standardOutput.Length > 2)
            {
                // use writeline, the builder itself will add the DEBUG / info tag
                ToolsProvider.Logger.WriteLine(_standardOutput.ToString());
            }

            if (_errorBuilder.Length > 2)
            {
                // use writeline, the builder itself will add the DEBUG / info tag
                ToolsProvider.Logger.WriteLine(_errorBuilder.ToString());
            }

            return true;
        }
        catch (Win32Exception ex)
        {
            ToolsProvider.Logger.Error(
                "Missing file while trying to run an action: " + _proc.StartInfo.FileName, ex.Message);
        }
    }
    ToolsProvider.Logger.Error("");
    return false;
}

我也尝试过使用 Impersonator 类来启动该流程,无论是否添加了管理员凭据。模仿者类没有做任何事情,只是告诉我我没有访问权限,尽管我正在模仿管理员......

我从这里得到了 Impersonator 类:

http://freshclickmedia.co.uk/2008/11/programmatic-impersonation-in-c/ http://freshclickmedia.co.uk/2008/11/programmatic-impersonation-in-c/

那么,如何在未提升的进程中从提升的进程获取标准和错误输出?


您只能通过侵入系统和/或利用某些错误和/或编写一些内核级代码(即驱动程序)来规避这些安全措施......

想想这种可能性意味着什么——提升将变得毫无意义,因为系统中总是存在一些可以通过这种方式操纵的提升过程……所以答案是否定的……

您应该能够做的是将输出重定向到文件(例如> C:\MyLog.txt)然后读取该文件......

考虑一种不需要这种访问权限的不同设计......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从提升的子进程获取错误和标准输出 的相关文章

随机推荐

  • 谷歌图表增加y轴宽度增加

    如何增加 Google 图表 y 轴宽度 请找到图片 左侧全文未正确显示 请指导我 如何增加谷歌图表y轴宽度 https i stack imgur com jl1L2 jpg 需要调整图表和chartArea中的大小options 要为左
  • Visual Studio 2008 解决方案中的最佳项目数是多少?

    Visual Studio 2008 解决方案中的最佳项目数是多少 我们有一个 Visual Studio 2008 解决方案 目前约有 50 个项目 随着解决方案中的大部分项目由主应用程序的插件程序集组成 它可能会继续增长 如果一个解决方
  • JSON 数字正则表达式

    我正在尝试为 JSON 中的数字字符串编写正则表达式 我对编写正则表达式还是新手 我找到了 JSON 数字机器的图表 here http www json org 但我不知道如何攻击它 以下是正则表达式应找到的一些字符串 22 55 754
  • 已知为 iOS5 和 Storyboard 更新 MGSplitViewController 的努力?

    我正在开发一个 iPad 应用程序 需要隐藏 显示分割视图的主控制器 相关 SO 答案注释 Matt Gemmell 的MGSplitViewController https github com mattgemmell MGSplitVi
  • 即时视频结果

    我正在查询亚马逊的产品广告 API 以获取即时视频 流媒体 结果 一切工作正常 除了缺少一些信息 描述不包含在结果中 例如 在亚马逊上website电影 食品公司 http www amazon com Food Inc dp B002VR
  • 如何用 Perl 编写 HTTP 服务器?

    Perl 标准库 CPAN 或其他地方是否有 Web 服务器或 HTTP 服务器模块 我想我正在寻找Python 3的等价物http server模块 谢谢 此外HTTP 守护进程 http search cpan org perldoc
  • React Native 在多个并发 Android 模拟器上运行

    我想同时在至少 2 个 Android 模拟器上测试我的应用程序 我可以启动 2 个模拟器 但似乎找不到如何启动react native run android我的应用程序在 2 个带有 ADB 的模拟器上运行 如果可能的话我也希望能够运行
  • 确定两个列表是否包含相同的数字项而不进行排序

    我有两个列表 我需要确定它们是否包含相同的值而不进行排序 即值的顺序无关 我知道排序会起作用 但这是性能关键部分的一部分 项目值落在 2 63 范围内 我们总是比较相同大小的列表 但列表大小范围为 1 8 示例列表 A 0 0 4 23 1
  • 对在 django 中将 CSV 文件制作为 ZIP 文件感到困惑

    我有一个视图 它从我的网站获取数据 然后将其放入 zip 压缩的 csv 文件中 这是我的工作代码 没有 zip def backup to csv request response HttpResponse mimetype text c
  • Python os.path.dirname 更改目录时返回意外路径

    目前我不明白 为什么 pythonsos path dirname像它那样行事 假设我有以下脚本 Not part of the script just for the current sample file C Python Test t
  • 在 Web api 中使用 itextsharp 将 html 转换为 pdf 时出现异常

    项目清单 我正进入 状态 the uri prefix is not recognized itextsharp 例外 遵循我的 web api 控制器的方法 它接收 html 数据并将其转换为 pdf System Web Http Ac
  • 在C++中解析argc和argv

    我想学习更多 C 通常我会创建一个 for 循环来解析 argv 最后得到一堆 C 风格的字符串 我想在 C 中做类似的事情 但最好不要从 proc whatever 中读取 起初 我尝试将 C 风格字符串转换为 C 风格字符串 但没有结果
  • Tomcat 7 支持 Java 8 吗?

    In Tomcat官方页面 http tomcat apache org whichversion html它说 Tomcat 7 支持 Java 8 如果我下载这个并使用 Java 8 运行它就可以工作 但是 在 Openshift 上是
  • 如何使 gif 在黑莓 java 上完成后消失?

    我知道如何加载 gif 并让它运行 但是如何让它消失呢 IE 它位于另一个位图背景之上 看起来像与背景交互 我希望它在完成一次后消失 您可以将 gif 设置为不重复并使最终帧 100 透明
  • TextView的设置阻止其他TextView的跑马灯滚动

    这是在其他地方问过的 但该解决方案对我不起作用 因此 在更多背景下再次提出它 问题是活动包含滚动音乐标题文本视图 该视图被更新的经过时间计数器文本视图中断 我的活动布局中有这两个 TextView 小部件 尽管它们被其他布局容器包含
  • 尝试创建 100MB 缓冲区时出现分段错误

    我正在尝试将一个大的二进制文件写入 C 程序的缓冲区中 在尝试创建与文件读取大小相同的缓冲区后 GDB 总是会出现段错误 它要么在 fclose pf 倒带或 f open 上失败 这让我相信当我尝试创建缓冲区时出现了问题 我的代码段如下
  • rmagick安装[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在安装 Rmagick 时遇到一些问题 有两种安装方法 1 使用Ruby Gem 2 bld来源 我在这两方面都面临问题 但我希望能够获得 gem
  • 有什么方法可以检查是否强制执行严格模式?

    无论如何 是否要检查是否强制执行严格模式 use strict 并且我们希望为严格模式执行不同的代码 为非严格模式执行其他代码 寻找类似的功能isStrictMode boolean 事实是this在全局上下文中调用的函数内部不会指向全局对
  • HAProxy 随机空响应

    我安装了 HAPROXY 以实现两台服务器之间的平衡 不幸的是 HAPROXY 返回随机 ERR EMPTY RESPONSE 我也安装了统计信息 但统计信息没有出现频繁地因为有时会显示统计数据 我和一些朋友仔细检查了我的配置 没有发现问题
  • 从提升的子进程获取错误和标准输出

    我创建了一个进程处理程序 它启动两种类型的进程 使用管理员用户名和密码提升的权限 另一种无需输入任何用户名和密码即可正常运行 我正在努力弄清楚如何从提升的进程中获取输出 启动进程的应用程序不需要管理员凭据即可运行 管理员凭据输入到单独的加密