Environment:Win7 64bit,US
Target: copy c:\windows\system32\chklogo.wtl到c:\logs 下
如果手工打开cmd,
1. cmd的title是Administrator:C:\windows\system32\cmd.exe
2. 当前工作目录c:\Users\username\>
3. 输入copy c:\windows\system32\chk*.* c:\logs 回车
文件copy 正确
如果创建c#项目,code 如下
第一种方法
 System32.Diagnostics.Process p=new System.Diagnostics.Process();
 p.StartInfo.FileName=@"cmd.exe";
 p.StartInfo.Arguments=@"/k copy c:\windows\system32\chk*.* c:\logs";
 p.StartInfo.CreateNoWindow=false;    //我希望能看到情况
 p.StartInfo.WindowStyleSystem.Diagnostics.ProcessWindowStyle.Normal;
 p.Start();
 p.waitForExit();
结果
  弹出一个cmd窗口,title是Administrator:C:\windows\System32\cmd.exe
  没有copy我生成的chklogo.wtl.只copy了系统自带的chkdsk.exe与chkntfs.exe
第二种方法
  code同上,但是在p.WaitForExit()处设置BreakPoint
  运行,这时在弹出的窗口中人工输入copy c:\windows\system32\chk*.* c:\logs
  结果同上
第三种方法
 System32.Diagnostics.Process p=new System.Diagnostics.Process();
 p.StartInfo.FileName=@"cmd.exe";
 p.StartInfo.Arguments=@"/k c:\windows\system32\cmd.exe"; //尝试用管理员权限试,难道我自己没有管理员权限??我只有一个用户
 p.StartInfo.RedirectStandardInput=true;
 p.StartInfo.RedirectStandardOutput=true;
 p.StartInfo.UseShellExecute=false;
 p.StartInfo.Verb="RunAs";
 p.StartInfo.CreateNoWindow=false;    //我希望能看到情况
 p.StartInfo.WindowStyleSystem.Diagnostics.ProcessWindowStyle.Normal;
 p.Start();
 p.StandardInput.WriteLine(@"copy c:\windows\system32\chk*.* c:\logs");
 p.waitForExit();
结果
 没有cmd窗口出现,而且还是没copy我自己生成的chklogo.wtl文件.只copy了系统自带的chkdsk.exe与chkntfs.exe为什么啊??????

解决方案 »

  1.   

    今天自己能回答自己的问题,过了半年.当然,这还是要托某些人的福气了,共享了info.
    这个问题就是64bit OS的redirector的问题.
    解决方法: 关闭64bit的redirector,copy完了再重新开启.要用API. WoW64Fsxxxxxxx.
      

  2.   

    今天自己能回答自己的问题,过了半年.当然,这还是要托某些人的福气了,共享了info.
    这个问题就是64bit OS的redirector的问题.
    解决方法: 关闭64bit的redirector,copy完了再重新开启.要用API. WoW64Fsxxxxxxx. 请问marcus 这个怎么操作的,谢谢