2013-04-15 37 views
0

我试图断开/连接我的调制解调器适配器,命名为“конект”,但它不起作用,因为适配器的名称包含俄语字母。如何强制它工作?请帮忙。如果包含俄文字母,命令不执行?

连接(“конект”,“”,“”,true);

public static void Connect(string adapter, string login, string pass, bool discon) 
    { 
     string cmd = ""; 
     if (discon) 
     { 
      cmd = "rasdial " + '"' + adapter + '"' + @" /disconnect"; 
     } 
     else 
     { 
      cmd = "rasdial " + '"' + adapter + '"' + " " + login + " " + pass; 
     } 
     Cmd(cmd); 
    } 
    public static void Cmd(string URL) 
    { 
     ProcessStartInfo startInfo = new ProcessStartInfo("CMD.exe"); 
     Process p = new Process(); 
     startInfo.RedirectStandardInput = true; 
     startInfo.UseShellExecute = false; 
     startInfo.RedirectStandardOutput = true; 
     startInfo.RedirectStandardError = true; 
     startInfo.CreateNoWindow = true; 
     p = Process.Start(startInfo); 
     p.StandardInput.WriteLine(URL); 
     p.StandardInput.WriteLine(@"EXIT"); 
     p.WaitForExit(); 
     p.Close(); 
    } 

[我知道,只需要重命名以英文字母和代码将工作适配器,但我想知道如何迫使它与俄文字母工作]

+3

“不起作用”是什么意思?你是否遇到异常,或者它是否意味着它不会断开连接? –

+0

当你用俄语字母尝试时会发生什么? –

+0

没有例外。什么都没发生。 – Halabella

回答

1
p.StandardInput.WriteLine(URL); 

的ProcessStartInfo是缺少StandardInputEncoding属性。如果此代码在没有西里尔代码页的计算机上运行,​​则可能会导致包含西里尔字符的“URL”字符串发生损坏,如默认系统代码页。

你真的想在这里避免使用输入重定向,它不是必要的。使用的CMD.EXE/c命令选项,这样就可以直接通过命令行:

startInfo.Arguments = "/c " + URL; 
p = Process.Start(startInfo); 

FWIW,没有必要采用CMD.EXE,只是rasdial.exe直接运行。

+0

最后一行可能是最重要的。 –

相关问题