标签: startprocessinfo

ProcessInfo和RedirectStandardOutput

我有一个应用程序在命令窗口中调用另一个进程,该进程已更新输出到控制台窗口的统计信息.我认为这是一个相当简单的操作,但我似乎无法让它工作.我错过了什么吗?

string assemblyLocation = Assembly.GetExecutingAssembly().Location;

Process process = new Process
{
    ProcessStart =
    {
        RedirectStandardOutput = true,
        UseShellExecute = false,
        WindowStyle = ProcessWindowStyle.Hidden,
        Arguments = arg,
        FileName = assemblyLocation.Substring(0, assemblyLocation.LastIndexOf("\\")) + "\\ffmpeg.exe",
        CreateNoWindow = true
    }
};

process.Start();

Console.WriteLine(process.StandardOutput.ReadToEnd());

process.WaitForExit();
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要的是输出在我触及的过程中发生变化,或者数据进入读者,我从中得到了事件.

任何帮助都会很棒,我觉得这是一个新手问题,但似乎缺少一些东西.

.net c# startprocessinfo redirectstandardoutput

28
推荐指数
3
解决办法
4万
查看次数

在vb.net中以不同用户身份运行新进程

我目前正在使用一种自行开发的方法在Vista中以不同的用户身份运行一个进程,我无法摆脱那种黑客攻击并且不太理想的感觉(除了它摧毁了UAC,崩溃了我的事实)有安全例外的应用程序,并强制我完全禁用UAC).我的进程包含两个项目(所以两个EXE文件) - 一个"接口"和一个"启动存根" - 这里是过程:

  1. 用户有一个启动"Interface.exe notepad.exe"的快捷方式
  2. Interface.exe有一个表单,要求他们使用他们想要的凭据
  3. Interace.exe使用ProcessStartInfo以新用户身份创建LaunchStub.exe(LS)的实例
  4. LS使用ProcessStartInfo(ShellExecute设置为true)来启动所请求的文件,并且因为它已经作为请求的用户运行,所以新进程也是如此.

我有一个两步过程的原因是我希望用户能够右键单击操作系统具有(.EXE,.SQL,.MSC等)默认操作的任何文件并启动它,并且仅限ProcessStartInfo支持启用"UseShellExecute",但该开关阻止我使用新凭据,所以我一次只能做一个.

这会导致一些问题 - 首先,用户必须已经存在于计算机上,这意味着他们必须先在本地登录.如果该用户没有本地配置文件,则所请求的应用程序有时会启动,但我得到注册表和配置文件例外,因为应用程序期望存在尚未存在的事物(如注册表中的HKCU配置单元,用户不会因为他们从未登录过.

我知道我应该能够将我的应用程序的权限"提升"给他们请求的用户,启动我的新进程,然后撤消提升,但我无法找到一个好的代码示例,并且我不确定它是否允许以完全不同的用户身份运行.这一切都有意义吗?我不禁觉得有更好的方法来做到这一点.


更新:我刚尝试了一些我在网上发现的模拟代码,但无济于事.当与ProcessStartInfo一起使用时,它似乎仍然使用我当前的登录启动进程,而不是我提供的进程,即使我已使用提供的凭据激活模拟.

vb.net impersonation runas startprocessinfo security-context

7
推荐指数
1
解决办法
3万
查看次数