Открыть текстовый файл из приложения C # - PullRequest
4 голосов
/ 07 января 2009

Следующий код должен открыть CMD из моего приложения C # и открыть файл text.txt.

Я пытался задать путь к файлу в качестве переменной среды, но когда открывается блокнот, он ищет% file% .txt вместо text.txt

Есть идеи, почему?

System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.EnableRaisingEvents=false;
        proc.StartInfo.EnvironmentVariables.Add("file", "c:\\text.txt");
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.FileName = "notepad";

        proc.StartInfo.Arguments="%file%";
        proc.Start();
        proc.WaitForExit();

        Console.WriteLine(proc.ExitCode);

Ответы [ 8 ]

10 голосов
/ 07 января 2009

Если ваша цель - запустить редактор с файлом .txt (как сказано в названии вопроса), просто используйте:

Process.Start("C:\\text.txt")
3 голосов
/ 07 января 2009

Короткая версия - я подозреваю, что вам придется передавать аргумент более напрямую, т.е.

 proc.StartInfo.Arguments = @"""c:\text.txt""";

Хотя вы можете устанавливать переменные среды (для использования в процессе), я не думаю, что вы можете использовать их во время запуска процесса.

2 голосов
/ 07 января 2009

Чего вы пытаетесь достичь с помощью% file%? Аргумент командной строки для notepad.exe - это файл, который вы хотите открыть. Вам нужно сделать что-то вроде этого:

proc.StartInfo.Arguments = "c:\\text.txt";
1 голос
/ 07 января 2009

set UseShellExecute = true

таким образом он должен использовать процессор cmd.exe для раскрытия переменной% file%

1 голос
/ 07 января 2009

Одна очевидная проблема заключается в том, что для UseShellExecute установлено значение false. Это означает, что вы запускаете блокнот напрямую, не передавая командную оболочку cmd.exe. Поэтому переменные окружения не раскрываются.

Я не уверен, чего вы пытаетесь достичь (зачем вам нужно добавлять переменную окружения?), Но сработало бы следующее:

    System.Diagnostics.Process proc = 
        new System.Diagnostics.Process(); 
    proc.EnableRaisingEvents = false; 
    proc.StartInfo.EnvironmentVariables.Add("file", "c:\\text.txt"); 
    proc.StartInfo.UseShellExecute = false; 
    proc.StartInfo.FileName = "cmd.exe";
    proc.StartInfo.Arguments = "/c notepad %file%"; 
    proc.Start(); 
    proc.WaitForExit(); 
0 голосов
/ 07 января 2009

Готов поспорить, что вам нужно установить WorkingDirectory , чтобы заставить это работать. NOTEPAD.exe обычно находится в % SYSTEMROOT% (C: \ windows) , однако по умолчанию используется % SYSTEMROOT% \ system32 . Попробуйте ниже.

System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.EnableRaisingEvents=false;
        proc.StartInfo.WorkingDirectory = "%SYSTEMROOT%";
        proc.StartInfo.EnvironmentVariables.Add("file", "c:\\text.txt");
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.FileName = "notepad";

        proc.StartInfo.Arguments="%file%";
        proc.Start();
        proc.WaitForExit();

        Console.WriteLine(proc.ExitCode);
0 голосов
/ 07 января 2009

Возможно, это связано с тем, как работают StartInfo.Arguments. Если вы не можете найти ничего лучше, это сработало для меня:

proc.StartInfo.FileName = "cmd";
proc.StartInfo.Arguments="/c notepad %my_file%";
0 голосов
/ 07 января 2009

Попробуйте это:

proc.StartInfo.Arguments = System.Environment.GetEnvironmentVariable("file");
...