如果包含俄语字母,为什么命令不会执行?

时间:2013-04-15 17:17:01

标签: c#

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

  

连接(“конект”,“”,“”,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();
    }

[我知道只需要用英文字母和代码重命名适配器就行了,但我想知道如何强制它用俄文字母工作]

1 个答案:

答案 0 :(得分:1)

    p.StandardInput.WriteLine(URL);

ProcessStartInfo缺少StandardInputEncoding属性。如果此代码在没有西里尔语代码页作为默认系统代码页的机器上运行,那么包含西里尔字符的“URL”字符串可能会受到损坏。

你真的想避免在这里使用输入重定向,这是没有必要的。使用cmd.exe的/ c命令选项,以便可以直接传递命令行:

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

Fwiw,无需使用cmd.exe,只需直接运行rasdial.exe。