2013-04-15 38 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

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

相關問題