我在tscon上的Process.Start中收到“系统无法找到指定Exception的文件”
工作:
Process.Start(new ProcessStartInfo(@"c:\Windows\System32\notepad.exe", "temp.txt"));
不工作:
Process.Start(new ProcessStartInfo(@"c:\Windows\System32\tscon.exe", @"0 /dest:console"));
我需要tscon.exe。 为什么我会收到此错误?
编辑:
c:\Windows\System32
文件夹中。该文件有些强化吗?无法理解这一点...
答案 0 :(得分:7)
哦,这件事真的引起了我的注意 我终于设法从Process.Start启动tscon.exe 您需要传递“管理员”帐户信息,否则会收到“找不到文件”错误。
以这种方式行事
ProcessStartInfo pi = new ProcessStartInfo();
pi.WorkingDirectory = @"C:\windows\System32"; //Not really needed
pi.FileName = "tscon.exe";
pi.Arguments = "0 /dest:console";
pi.UserName = "steve";
System.Security.SecureString s = new System.Security.SecureString();
s.AppendChar('y');
s.AppendChar('o');
s.AppendChar('u');
s.AppendChar('r');
s.AppendChar('p');
s.AppendChar('a');
s.AppendChar('s');
s.AppendChar('s');
pi.Password = s;
pi.UseShellExecute = false;
Process.Start(pi);
还要看到命令的结果改变以下两行
pi.FileName = "cmd.exe";
pi.Arguments = "/k \"tscon.exe 0 /dest:console\"";
答案 1 :(得分:1)
虽然看起来你很久以前就找到了解决方法,但我会解释为什么会出现这个问题以及可以说是更好的解决方案。我遇到了与shadow.exe相同的问题。
如果你使用Process Monitor观看,你会发现它实际上是在C:\ Windows \ SysWOW64 \而不是C:\ Windows \ system32 \中寻找文件,因为{{3}并且您的程序是32位进程。
解决方法是编译x64而不是Any CPU或使用P / Invoke临时怀疑并重新启用带有File System Redirection和Wow64RevertWow64FsRedirection Win API函数的文件系统重定向。
internal static class NativeMethods
{
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
}
////////////////
IntPtr wow64backup = IntPtr.Zero;
if (!Environment.Is64BitProcess && Environment.Is64BitOperatingSystem)
{
NativeMethods.Wow64DisableWow64FsRedirection(ref wow64backup);
}
Process.Start(new ProcessStartInfo(@"c:\Windows\System32\tscon.exe", @"0 /dest:console"))
if (!Environment.Is64BitProcess && Environment.Is64BitOperatingSystem)
{
NativeMethods.Wow64RevertWow64FsRedirection(wow64backup);
}
}