代码之家  ›  专栏  ›  技术社区  ›  Tim Joseph

打开快捷方式时重定向StandardIn

  •  0
  • Tim Joseph  · 技术社区  · 14 年前

    由于UAC的乐趣,我需要以编程方式打开一个提升的命令提示符,然后重定向标准输入,以便使用 time 命令。

    如果我使用

    Process ecp = System.Diagnostics.Process.Start("c:/ecp.lnk");
    

    但是,如果使用此方法,则无法重定向standardIn。

    如果我使用StartProcessInformation方法(如果您调用一个exe,这个方法会非常有效)

    ProcessStartInfo processStartInfo = new ProcessStartInfo("c:/ecp.lnk");
                    processStartInfo.UseShellExecute = false;
                    processStartInfo.ErrorDialog = false;
                    processStartInfo.RedirectStandardError = true;
                    processStartInfo.RedirectStandardInput = true;
                    processStartInfo.RedirectStandardOutput = true;
                    Process process = new Process();
                    process.StartInfo = processStartInfo;
                    bool processStarted = process.Start();
    
                    StreamWriter inp = process.StandardInput;
                    StreamReader oup = process.StandardOutput;
                    StreamReader errorReader = process.StandardError;
                    process.WaitForExit();
    

    指定的可执行文件不是有效的Win32应用程序。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Tim Joseph    14 年前

    如果没人能想出更好的主意(很好,拜托),下面是我办公室里一个更狡猾的人的工作:

    1. 复制cmd.exe(指向此文件的链接)
    2. 将此文件粘贴到其他目录
    3. 将新粘贴的文件重命名为其他文件
    4. 将此新文件的权限设置为以管理员身份运行

    您仍然会弹出升级对话框,但至少可以捕获此有效Win32应用程序的standardIn!