0

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

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

    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();
    }

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

4

1 回答 1

1
    p.StandardInput.WriteLine(URL);

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

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

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

Fwiw,也不需要使用cmd.exe,直接运行rasdial.exe即可。

于 2013-04-15T18:43:24.883 回答