2010-10-19 27 views
0

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

如果我使用

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

但是,如果我用这个方法,我不能重定向standardIn我可以打开链接(.lnk文件)。

如果我使用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应用程序。

任何人都可以帮助我创建一个提升的命令提示符,我可以捕获标准输入吗?或者如果有人知道如何以编程方式升级命令提示符?

回答

0

如果没有人有一个更好的主意来了(拜托),这里是工作在我的办公室更狡猾一个围绕只是想出了:

  1. 复制CMD.EXE(的挂靠在该文件指向)
  2. 这个文件粘贴到不同的目录
  3. 重命名新粘贴的文件,以不同的东西
  4. 设置这一新文件的权限,以管理员身份运行

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